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终止程序。
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)
请注意,您将密码泄露给您尝试连接的所有计算机。如果您不信任他们的管理员,这不是一个好主意。