Bash
通過鍵盤繼續循環
我在一台不知道其確切 IP 地址的 linux 機器上擁有使用者帳戶。但我知道它在其中一個上執行的範圍。我想檢查哪個伺服器是我想要的伺服器。有一些 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
此程式碼用於每個 IP。如果執行 ssh,它會提示輸入密碼,如果 ssh 沒有執行,它會嘗試下一個 ip,如果伺服器關閉,它會等待很長時間。此外,如果伺服器有 ssh 並提示輸入密碼,我無法通過鍵盤從此類伺服器中逃脫。
如何通過鍵盤從這兩種類型中逃脫並轉到下一個IP而不終止程序?
例如
CTRL
+C
終止程序。
Ctrl-C
將 SIGINT 信號發送到互動式 shell 的前台作業的所有程序。這樣就可以將其發送到sh
正在執行的腳本和ssh
.您可以通過添加以下內容使其不會殺死外殼:
trap : INT
到腳本的開頭。
您可能還想使用 ConnectTimeout 選項
ssh
:ssh -o ConnectTimeout=2 ...
請注意,您將密碼洩露給您嘗試連接的所有機器。如果您不信任他們的管理員,這不是一個好主意。
要解決長時間超時的問題,您可以測試您是否可以
ping
使用低計數和短間隔的機器(對於普通使用者來說,最少 0.2 秒)。... ping -c 2 -i 0.2 "192.168.1.$i" if [ $? == 0 ] ; then ssh 192.168.1.$i -l user_name fi ...
如果您只想使用您的私鑰/公鑰登錄伺服器,您可以告訴
ssh
只接受該身份驗證,因此如果提示輸入密碼,ssh 將失敗。