linux - 自动化远程交互提示

标签 linux bash shell

<分区>

我正在尝试自动化 SSH bash 脚本来检查我的服务器是否能够通过 SSH 连接远程设备。我无法安装任何第三方工具,如 sshpass、expact 或 Net:SSH,因为我的组织不允许这样做。

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

即使在远程设备提示符下提供退出命令后,是否有任何方法可以继续执行脚本?

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

代码工作正常,但是当提供 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 中的命令必须与制表符对齐。

关于linux - 自动化远程交互提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57134257/

相关文章:

linux - Maven 构建使用/分配大量内存

Linux -/usr/local 或/var 用于应用程序数据?

bash - 如何在 shell 脚本中使用 echo 保留前导空格?

python - 如何将一组 csv 文件转换为另一组 csv 文件(具有不同的文件名和格式)?

linux - bash 4.4 不将变量传递给子 shell

linux - 优化打印计数器的循环

将 secret 消息翻译成真实字母的Python程序

bash - 用sed修改key ="Value"配置

bash - 我可以只 grep 文件的前 n 行吗?

regex - Perl正则表达式单引号