我正在尝试编写一个脚本来测试我是否可以以 root 用户身份连接到文件中的服务器列表中的 ssh,目前我有以下信息:
for i in $(cat servers.list); do
if [ "ssh root@$i" ]
then
echo "can connect as root in server $i"
else
echo "can't connect as root in server $i"
fi
done
但它总是说可以连接,即使不是这样。
我将非常感激您的帮助。
答案1
[ "ssh root@$i" ]
测试细绳 ssh root@$i
非空——所以它当然总是正确的。
假设你想要做的是悄悄地执行命令ssh root@$i
并测试它的退出状态:
if ssh -q root@$i; then
但是,如果成功,它将(默认)打开一个登录 shell $i
- 您的循环将不会继续,直到您退出这样的 shell。也许在远程主机上执行特定命令会更好:
if ssh -q root@$i /bin/true; then
最后,循环遍历结果cat
是一个坏习惯:最好使用while
循环:
while IFS= read -r i; do
if ssh -q root@"$i" /bin/true
then
echo "can connect as root in server $i"
else
echo "can't connect as root in server $i"
fi
done < servers.list
您可能还想看看parallel-ssh
pssh 包。