Bash

通過鍵盤繼續循環

  • December 23, 2013

我在一台不知道其確切 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 將失敗。

引用自:https://unix.stackexchange.com/questions/106335