通过键盘继续循环

Moh*_*dar 4 bash ssh keyboard for

我在一台 linux 机器上有一个用户帐户,但我不知道它的确切 IP 地址。但我知道它在其中一个上运行的范围。我想检查哪个服务器是我想要的服务器。有一些 Microsoft 服务器、一些 Linux 服务器和一些服务器也出现故障。

我有一个 shell 脚本来检查每个服务器:

#!/bin/sh
for i in $(seq 1 127)
do
    echo "192.168.1.$i:"
    ssh 192.168.1.$i -l user_name
done
Run Code Online (Sandbox Code Playgroud)

此代码适用于每个 IP。如果它运行了 ssh,它会提示输入密码,如果 ssh 没有运行,它会尝试下一个 ip,如果服务器宕机,它会等待很长时间。此外,如果服务器有 ssh 并提示输入密码,我将无法通过键盘从此类服务器中逃脱。

如何在不终止程序的情况下通过键盘跳出这两种类型并转到下一个IP?

例如CTRL+C终止程序。

Sté*_*las 5

Ctrl-C将 SIGINT 信号发送到交互式 shell 的前台作业的所有进程。因此,将其发送到sh正在运行的脚本和ssh.

您可以通过添加以下命令使其不杀死外壳:

trap : INT
Run Code Online (Sandbox Code Playgroud)

到脚本的开头。

您可能还想使用 ConnectTimeout 选项ssh

ssh -o ConnectTimeout=2 ...
Run Code Online (Sandbox Code Playgroud)

请注意,您将密码泄露给您尝试连接的所有计算机。如果您不信任他们的管理员,这不是一个好主意。