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

ssh remote command as different user

为什么这个命令的 awk 部分没有得到处理。当我 运行 直接作为 user1.

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

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

当你将所有这些东西组合在一起时,你需要确保你转义了所有你现在不想评估的重要字符,但稍后会。 $ 就是一个很好的例子。

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

计算当前 bash 中的 </code>,这是你不想要的。你可以看到它,如果你 运行 简单地 </p> <pre><code>$ echo "ssh -i [...] -q user1@SERVER2 df -h /dir1/dir2 | awk '{print }'" 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 }'

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

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