我从 server2 上的 server1 运行这个 SSH 命令:
ssh server2 echo pasword | su - root -c "echo this is the `hostname`"
我希望结果是 server2 的主机名,但我得到的是 server1 的主机名。如何操作命令以获取服务器 2 的主机名?
谢谢。
我从 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(“密码”)获取输出并将其通过管道传输到本地运行的此命令中:
...从技术上讲,它与您的 LOCAL 主机名相呼应(并且不会对第一个命令中的回显“密码”做任何事情)。(虽然你不需要'root' -
hostname
可以由远程系统或本地系统上的任何人运行,不需要超级用户!)。您需要做的是将命令传递到 SSH 而不是以这种方式传递到管道中。这样做的方法是使用这个:
这将正确地将请求发送到远程服务器以从该服务器获取主机名并在远程服务器上执行该请求并告诉您响应。 您不需要
sudo
在远程服务器上执行此操作。如果您需要为 SSH 会话提供密码,则应
ssh-pass
改为使用,并改为执行以下命令:这被认为是正确的方法,因为它以
keyboard-interactive
非交互方式进行身份验证,并在提示输入密码时将密码传递给 SSH 命令。 但是,这仍然非常不安全,因为您的密码将在命令历史记录中或在脚本中硬编码,因此您应该考虑在远程服务器上使用 SSH 密钥身份验证,而不是尽可能使用密码身份验证。这里有几件事。
首先 - 命令
执行以下操作:
通过 ssh
echo pasword
在远程服务器上运行命令server2
并将此命令的输出提供给在本地计算机上执行的以下命令:
如果您希望从 开始的整个管道
echo
在远程计算机上执行,您应该这样做:但这行不通,因为
su
需要从终端运行,并且只会中止并显示错误消息。但是,您不需要 root 权限来运行hostname
命令,因此您可以尝试您必须将替换
hostname
用单引号括起来,否则它将在发送到远程计算机之前在您的本地计算机上被替换,因此它仍然会打印您的本地主机名。