ssh到远程主机后执行命令脚本

需求:ssh到远程主机后执行命令,命令里面包含变量以及变量的赋值

问题:

[root@k8s-master shell]# cat ssh.sh 
#!/bin/bash
ssh -t -t root@192.168.200.142 <<eof
cd /
LSRESULT="$(ls)"
echo \$(ls)
exit
eof

[root@k8s-master shell]# sh ssh.sh 
cd /
LSRESULT="auto_mutual_trust
ssh.sh"
echo $(ls)
exit
Last login: Thu Sep 21 10:56:56 2023 from k8s-master
[root@k8s-node1 ~]# cd /
[root@k8s-node1 /]# LSRESULT="auto_mutual_trust
> ssh.sh"
[root@k8s-node1 /]# echo $(ls)

[root@k8s-node1 /]# exit
logout
Connection to 192.168.200.142 closed.

可以看到echo $(ls) 返回是空

这是因为我们把赋值语句放在了输入重定向里面(<<eof..eof),这种情况下,脚本中的赋值语句将在本地的shell执行,而不是在远程机器B上执行,ssh远程过去后再直接返回A机器上执行的。

解决方法:在变量声明加入\转义

[root@k8s-master shell]# cat ssh.sh 
#!/bin/bash
ssh -t -t root@192.168.200.142 <<eof
cd /
LSRESULT="\$(ls)"
echo \$(ls)
exit
eof

直接运行即可

[root@k8s-master shell]# sh ssh.sh 
cd /
LSRESULT="$(ls)"
echo $(ls)
exit
Last login: Thu Sep 21 11:04:23 2023 from k8s-master
[root@k8s-node1 ~]# cd /
[root@k8s-node1 /]# LSRESULT="$(ls)"
[root@k8s-node1 /]# echo $(ls)
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var wyx
[root@k8s-node1 /]# exit
logout
Connection to 192.168.200.142 closed.

注意对比LSRESULT运行结果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值