gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:19 27 4
gpt4 key购买 nike

为什么这个命令的 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}'"

关于linux - ssh 远程命令作为不同的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35658877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com