远程主机文件写入失败:Shell脚本SSH执行函数异常排查与解决
SSH执行含特殊字符命令失效的解决方法
初始实现的SSH函数
我编写了一个可在本地或远程主机执行任意命令的ssh_function函数:
## The ssh connection function ssh_function(){ local IP="$1" local COMMAND="$2" local STATUS if [[ $IP == $(hostname -i) ]] then STATUS=$(${COMMAND} 2>/dev/null) else STATUS=$(ssh -o "StrictHostKeyChecking no" -i $KEY_PATH root@"$IP" ${COMMAND} 2>/dev/null) fi echo "$STATUS" }
遇到的问题
当执行带>>、引号的命令(如向远程主机文件追加字符串的echo命令、sed命令)时,函数仅打印命令内容,并未执行实际操作;但执行简单命令(如apt安装命令)却正常。
尝试的局限性方案
我曾修改函数为仅支持>>操作的ssh_function3,虽能工作但局限性大。
最终解决方案:使用eval命令
最终通过在函数中使用eval命令解决了问题:
## The ssh connection function ssh_function(){ local IP="$1" local COMMAND="$2" if [[ $IP == $(hostname -i) ]] then eval "${COMMAND} 2>/dev/null" else eval "ssh -o "StrictHostKeyChecking no" -i $KEY_PATH root@"$IP" ${COMMAND} 2>/dev/null" fi }
内容的提问来源于stack exchange,提问作者Ilya Shmadchenko
相关产品推荐
相关产品推荐

