自动执行远程交互式提示



我正在尝试自动化一个SSH bash脚本来检查我的服务器是否能够SSH远程设备。我不能安装任何第三方工具,如sshpass,expact或Net:SSH,因为它在我的组织中是不允许的。

我创建了一个包含IP地址的ip.txt文件。脚本将选取第一个 IP 并通过 SSH 连接设备。在下一步中,我想提供任何命令,例如日期和上次退出。一切顺利,直到我提供退出命令。"退出"命令终止整个脚本,而不是转到下一个循环/IP。

即使在远程设备提示符上提供 exit 命令后,有什么方法可以继续脚本吗?

但是,以下命令有效:ssh 用户名$IP "date && exit",但我有不同的命令在不同的服务器上运行。

代码工作正常,但是当提供退出命令时,shell脚本被终止。

#!/bin/bash
for IP  in `cat /home/ip.txt`
do
echo "Going to SSH first $IP"
ssh username@$IP
date >> log.txt
exit >> log.txt
echo "Completed first loop for $IP"
done

我想手动输入命令,并希望脚本在提供退出命令时不应终止。

正如@rolandweber指出的那样,发生错误是因为您在本地执行exit命令。它应该看起来像这样:

#! /bin/bash
username=username
iplist=ip.txt
logfile=log.txt
while IFS= read -r ip; do
echo "Testing $ip"
echo -n "$ip: " >> $logfile
serverdate="$(ssh $username@$ip <<-EOF
date
EOF
)"
error=$?
echo "$serverdate ($error)" | tail -1 >> $logfile
done < $iplist

请注意,您可以缩进EOF,但 here-doc 中的命令必须与制表符对齐。

最新更新