我正在从本地主机连接remote-server
,并且我想在remote-server
.
按预期工作:
ssh remote-server "hostname"
remote-server
我很困惑。为什么这返回本地主机名,而不是远程服务器的主机名?
ssh remote-server "print $HOST"
localhost
答案1
你的第二个代码示例:
ssh remote-server "print $HOST"
localhost
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