ssh:在远程主机上执行命令而不是登录 shell

ssh:在远程主机上执行命令而不是登录 shell

我正在从本地主机连接remote-server,并且我想在remote-server.

按预期工作:

ssh remote-server "hostname"
remote-server

我很困惑。为什么这返回本地主机名,而不是远程服务器的主机名?

ssh remote-server "print $HOST"
localhost

答案1

你的第二个代码示例:

ssh remote-server "print $HOST"
localhost

将会被伟人标记外壳检查具有诊断功能的工具SC2029

Bash 扩展所有未转义/单引号的参数。这意味着有问题的代码与

ssh 主机“回显客户端主机名”

并将打印出客户端的主机名,而不是服务器的主机名。

通过转义 $HOSTNAME 中的 $,它将按字面意思传输并在服务器上进行评估。

通过使用

ssh host "print \$HOST"

或者

ssh host 'print $HOST'

你可以阻止你的当地的来自扩展主机的 shell,而是让 shellremote-server扩展它。

答案2

因为您使用的是双引号,所以 shell$HOST在执行命令并启动之前会进行评估ssh,因此您将命令“ print localhost”发送到远程服务器。

使用单引号代替:

shadur@proteus:~$ ssh axiom "echo $HOSTNAME"
shadur@axiom's password:
proteus

shadur@proteus:~$ ssh axiom 'echo $HOSTNAME'
shadur@axiom's password:
axiom

相关内容