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

给SSH传递带引号字符串问题:pssh命令引号嵌套失效求助

解决pssh命令中引号嵌套导致的截断问题

这问题我之前写批量脚本时也踩过坑!核心原因就是双引号的嵌套冲突:你用外层双引号包裹pssh要执行的远程命令,而里面echo又用了双引号,shell会把第一个内层双引号当成外层引号的结束标记,直接截断了后面的内容,自然达不到预期效果。

给你几个实用的解决方案,按需选就行:

方案1:转义内层双引号

把echo里的双引号用反斜杠\转义,这样shell就不会把它识别为外层引号的结束符:

pssh -h hosts -i "echo \"DenyUsers $1\" >> /etc/ssh/sshd_config && service sshd reload"

⚠️ 注意:如果$1是你本地脚本的参数,这样写没问题;但如果想让$1在远程机器上解析(比如远程机器的环境变量),需要把$也转义成\$1。

方案2:替换外层引号为单引号

单引号在shell里会原样传递所有内容,不会解析变量或转义字符(除了单引号本身),所以把外层的双引号换成单引号,内层保留双引号就不会冲突了:

pssh -h hosts -i 'echo "DenyUsers $1" >> /etc/ssh/sshd_config && service sshd reload'

⚠️ 这里要注意:如果$1是本地脚本的参数,单引号会让它不被本地shell解析,直接传到远程机器。如果要让本地解析$1,可以拆分引号:

pssh -h hosts -i 'echo "DenyUsers '"$1"'" >> /etc/ssh/sshd_config && service sshd reload'

原理是:先以单引号包裹部分内容,遇到$1时关闭单引号,用双引号包裹$1让本地解析,之后再打开单引号继续包裹剩余内容。

额外小提示

你命令里的service sshd config应该是笔误吧?修改sshd配置后,通常需要执行service sshd reload或者systemctl reload sshd(取决于系统版本)来让配置生效哦~

内容的提问来源于stack exchange,提问作者3-commerce

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:28:50