从输入(sshpass?)在多个本地服务器上执行 SSH 远程 cmd exec

从输入(sshpass?)在多个本地服务器上执行 SSH 远程 cmd exec

我目前正在寻找一种解决方案,用于从包含以下格式的“用户:密码”的输入文件在多个本地服务器上执行远程命令:

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

相关内容