Linux ssh远程命令作为不同的用户
为什么此命令的Linux ssh远程命令作为不同的用户,linux,ssh,command,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
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
当你把所有这些东西结合在一起时,你需要确保你避开了所有你现在不想评估的重要角色,但是以后要评估。
$
就是一个很好的例子
$ 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}'"
提供最简单的例子,说明什么不起作用,你得到了什么,你期望得到什么。当您将
su
、ssh
和管道组合成long命令时,如果不告诉您想要什么/问题是什么,则无法回答。感谢您的反馈。运行时:su user1-c“ssh-I/home/user1/.ssh/id\u rsa-quser1@SERVER2df-h/dir1/dir2 | awk'{print$5}'”我作为输出获取:/dev/sdf1 1008G 204M 957G 1%/dir1/dir2,而不是仅1%,这是添加awk命令所期望的。