【发布时间】:2018-05-08 22:24:31
【问题描述】:
我有machine A 和machine B。从我的local machine X,我想运行一个 bash 脚本,它将连接到 Machine A,然后连接到 Machine B,以检查 Machine B 上的包版本。
现在,我在Machine B 上安装了两个或更多软件包。
单包版本检查:
sshpass -p 'Password' ssh admin@A.A.A.A -p 30025 "sshpass -p 'Password' ssh B.B.B.B "dpkg -s env.ns | grep -E 'Version|Package' | tr '\n' ',' |sed 's/,$/\n/'""
结果:
Package: env.ns,Version: 51.0.0n
多包检查:
sshpass -p 'Password' ssh admin@A.A.A.A -p 30025 "sshpass -p 'Password' ssh B.B.B.B "dpkg -s env.ns | grep -E 'Version|Package' | tr '\n' ',' |sed 's/,$/\n/' && dpkg -s agent.ns | grep -E 'Version|Package' | tr '\n' ',' |sed 's/,$/\n/'""
结果:
Package: env.ns,Version: 51.0.0n
-bash: dpkg: command not found
我无法获得第二个的软件包版本。使用sshpass,我们可以传递多个命令在主机上运行吗?
预期结果:
Package: env.ns,Version: 51.0.0
Package: agent.ns,Version: 51.0.0
【问题讨论】:
-
设置私钥认证,使用
ssh -J admin@A.A.A.A:30025 B.B.B.B 'dpkg ...'。 -
您在 both 命令中存在引用嵌套问题。您需要转义每个命令中的内部双引号对,以使它们具有您想要的含义。我不确定这是否会完全解决您的问题,但这肯定是朝着正确方向迈出的一步。