ssh远程命令作为不同的用户

时间:2016-02-26 18:15:42

标签: linux ssh command

为什么不处理此命令的awk部分。当我直接以user1运行时,它可以正常工作。

[zimmerman@SERVER1 check]# su  user1 -c "ssh -i /home/user1/.ssh/id_rsa -q user1@SERVER2 df -h /dir1/dir2 | awk '{print $5}'"

Filesystem            Size  Used Avail Use% Mounted on
/dev/sdf1            1008G  204M  957G   1% /dir1/dir2

1 个答案:

答案 0 :(得分:1)

当你把所有这些东西组合在一起时,你需要确保你逃脱了你现在不想评估的所有重要角色,但是后来的角色。 $就是一个很好的例子。

$ su user1 -c "ssh -i [...] -q user1@SERVER2 df -h /dir1/dir2 | awk '{print $5}'"

评估当前bash中的$5,这是您不想要的。如果你只是

运行,你可以看到它
$ echo "ssh -i [...] -q user1@SERVER2 df -h /dir1/dir2 | awk '{print $5}'"
ssh -i [...] -q user1@SERVER2 df -h /dir1/dir2 | awk '{print }'

因此,要修复它,您需要转义$符号,例如

$ echo "ssh -i [...] -q user1@SERVER2 df -h /dir1/dir2 | awk '{print \$5}'"
ssh -i [...] -q user1@SERVER2 df -h /dir1/dir2 | awk '{print $5}'

TL; DR :所以你应该使用的最终命令行是

su  user1 -c "ssh -i /home/user1/.ssh/id_rsa -q user1@SERVER2 df -h /dir1/dir2 | awk '{print \$5}'"