我从 server2 上的 server1 运行此 SSH 命令:
ssh server2 echo pasword | su - root -c "echo this is the `hostname`"
我希望结果是 server2 的主机名,但我得到了 server1 的主机名。如何操作命令来获取服务器 2 的主机名?
谢谢。
首先,您的命令管道是错误的。按照目前的情况,这是按以下顺序执行的:
ssh server2 echo pasword
- 这将转到服务器 2 并登录并echo pasword
在远程系统上执行命令。(输出将是pasword
)
获取#1(“密码”)的输出并将其通过管道传输到本地运行的此命令中:
su - root -c "echo this is the `hostname`"
...从技术上讲,它与您的本地主机名相呼应(并且不会对第一个命令中的回显“密码”执行任何操作)。(尽管您不需要'root' -hostname
可以由远程系统或本地系统上的任何人运行,不需要超级用户!)。
您需要做的是将命令传递到 SSH 而不是以这种方式传递到管道中。这样做的方法是使用这个:
ssh server2 'echo "This is the $(hostname)"'
这将正确地将请求发送到远程服务器以从该服务器获取主机名并在远程服务器上执行该请求并告诉您响应。您不需要sudo
在远程服务器上执行此操作。
如果您需要为 SSH 会话提供密码,则应ssh-pass
改为使用,并执行以下命令:
sshpass -p YourPassword ssh server2 'echo "This is the $(hostname)"'
这被认为是正确的方法,因为它以keyboard-interactive
非交互方式进行身份验证,并在提示输入密码时将密码传递给 SSH 命令。然而,这仍然非常不安全,因为您的密码将在命令历史记录中或硬编码在脚本中,因此您应该考虑在远程服务器上使用 SSH 密钥身份验证,而不是在可能的情况下使用密码身份验证。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句