我必须在多台服务器上执行以下步骤:
- 使用我的用户名登录
- 输入
sudo su -
- 输入
amCLI -l 32/1 | grep Firmware
所以我想把这一切都写在一个脚本中,我的想法是:
#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
ssh -n vneudeck@$hostname "sudo su-; amCLI -l 32/1 | grep Firmware"
done
或者
#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
ssh -n vneudeck@$hostname "sudo amCLI -l 32/1 | grep Firmware"
done
但两者都不起作用。
答案1
更好的解决方案是设置 sudo,以便您的用户/full/path/to/amCLI
无需提供密码即可执行。
然后你就可以简单地
#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
ssh -n vneudeck@$hostname sudo /full/path/to/amCLI -l 32/1 | grep Firmware
done
答案2
也许如果你把 vneudeck@$hostname 放在双引号中,它会有所帮助。而且 su 和 - 之间没有空格,我希望这有帮助
答案3
第一个不起作用:
sudo su -; amCLI -l 32/1 | grep Firmware
这将执行sudo su -
,并且当它返回时(即当您以 root 身份处理完命令并退出时)它将执行 amCLI。(另请注意,sudo su
is的替代方案sudo -s
,但sudo su -
我认为它能做的更多。)
第二个版本可能在某些条件下有效:sudo
不应要求输入密码,并且amCLI
应在 PATH 中(不是 root 的路径,该路径可能是在您键入时设置的sudo su -
,而是您的路径,因为 sudo 使用您的路径)。尝试指定 的完整路径amCLI
,例如/usr/local/sbin/amCLI
或任何其他路径。