You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

远程SSH命令执行疑问:如何使hostname命令在远端主机执行?

解决SSH远程执行命令时hostname --fqdn在本地执行的问题

这问题我碰到过好几次了,核心原因是你本地的shell会优先解析$(hostname --fqdn),把它替换成本地主机名后,才把这个结果传到远端执行,所以远端生成的文件里存的自然是本地的主机名。要让这部分命令在远端主机上运行,关键是阻止本地shell提前解析命令替换部分,下面给你几个靠谱的实现方法:

方法一:用单引号包裹整个远端命令

单引号在Bash中会完全阻止变量替换和命令解析,整个命令会原封不动地发送到远端主机,由远端的shell来执行解析。直接修改命令如下:

ssh some_user@10.9.11.4 -i ~/.ssh/id_rsa 'echo $(hostname --fqdn) >> /tmp/hostname_fqdn'

这样远端主机的shell会自己处理$(hostname --fqdn),获取到远端的主机名后写入文件。

方法二:转义命令替换的$符号

如果你的场景需要在命令中混合使用本地变量和远端执行的命令,可以通过转义$来阻止本地解析:

CMD="echo \$(hostname --fqdn) >> /tmp/hostname_fqdn"
ssh some_user@10.9.11.4 -i ~/.ssh/id_rsa "$CMD"

这里的\$会让本地shell保留$(hostname --fqdn)的原始格式,把它传递给远端后,由远端shell完成解析。注意这里最好给$CMD加上双引号,避免命令中的空格等特殊字符被本地shell拆分。

方法三:使用带单引号的Here-Doc(适合复杂多行命令)

如果需要执行的命令比较复杂(比如多行脚本),可以用Here-Doc的方式,并且给EOF加上单引号来阻止本地解析:

ssh some_user@10.9.11.4 -i ~/.ssh/id_rsa << 'EOF'
echo $(hostname --fqdn) >> /tmp/hostname_fqdn
# 这里还可以添加更多远端要执行的命令
EOF

这种方式会把EOF之间的内容完整发送到远端执行,非常适合需要批量执行远端命令的场景。


内容的提问来源于stack exchange,提问作者tomek.xyz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:52:44