嗨,我有一个几百个主机的列表。我想在循环中使用 ssh 运行命令,如果我的 ssh 密钥设置正确,那么如果我收到密码质询,我会执行命令我想跳到下一个主机
所以假设我有hosta,hostb和hostc。 我可以对hosta和hostc做一个ssh,但hostb正在挑战我的密码。有没有办法检查主机是否会向我提出密码? 所以我的逻辑是
if I get challenge from $host; then
skip host
else
ssh $host 'command'
fi
我希望这是有道理的。提前感谢您
for host in host1 host2 host3; do
ssh -o PasswordAuthentication=no $host command
done
要使其并行添加&
:
for host in host1 host2 host3; do
ssh -o PasswordAuthentication=no $host command &
done
如果这是你经常做的事情,我建议看看dsh。http://www.tecmint.com/using-dsh-distributed-shell-to-run-linux-commands-across-multiple-machines/
它允许您列出您的服务器,并针对所有服务器或仅针对子集(Web,db,app等)运行命令
您可以创建全局文件,也可以创建自己的个人文件。
ssh
有一个选项,称为BatchMode
。
你可以像这样使用它
ssh -o BatchMode ...
它不会问你任何事情,但跳过连接尝试。
或者使用 rundeck - 这可以在 http://rundeck.org 中找到