我目前正在寻找一种解决方案,用于从包含以下格式的“用户:密码”的输入文件在多个本地服务器上执行远程命令:
jboss5:manager:192.168.1.101
database1:db01:192.168.20.6
server8:localnet:192.168.31.83
x:z:192.168.1.151
test:mynet:192.168.35.44
.... and others
我希望远程执行的一些命令:
cd $HOME; ./start_script.sh; wget 192.168.1.110/monitor.sh; chmod +x monitor.sh; ./monitor.sh
我知道有一个名为“sshpass”的实用程序,但不确定如何应用该实用程序来满足我的需求。
我愿意接受任何能够满足我需求的想法,任何帮助都将不胜感激!
谢谢
答案1
我建议您使用公钥认证而不是密码认证,它比纯密码强得多,而且您不需要sshpass
。只需创建没有密码的私钥并使用ssh
选项-i
,但如果您仍希望使用密码,以下是解决方案:
#!/bin/sh
hosts='
jboss5:manager:192.168.1.101
database1:db01:192.168.20.6
server8:localnet:192.168.31.83
x:z:192.168.1.151
test:mynet:192.168.35.44
'
for acct in ${hosts}; do
user=$(echo "${acct}" | awk -F: '{print $1}')
pass=$(echo "${acct}" | awk -F: '{print $2}')
host=$(echo "${acct}" | awk -F: '{print $3}')
sshpass -p "${pass}" ssh "${user}@${host}" \
'cd $HOME; ./start_script.sh; wget 192.168.1.110/monitor.sh; chmod +x monitor.sh; ./monitor.sh'
done