Linux
如果公鑰身份驗證失敗,腳本化 ssh 不應要求輸入密碼
這是我的案例:我有一個腳本,列出了數百個伺服器並測試它們是否允許
public key authentication
使用特定的private key
(在 ssh 客戶端的.ssh
目錄中)登錄。其中一些伺服器配置錯誤,我無法控制任何這些伺服器上的 SSH 服務。這是我到目前為止所擁有的:
ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit returncode=$?
所以到目前為止,這對大多數伺服器都有效(即,
non-zero
當伺服器無法訪問時返回一個返回碼,並且0
當伺服器可以登錄時),直到某些麻煩的伺服器由於某些 SSH 錯誤配置而失敗(例如~/.ssh
在遠端伺服器上)有一個不正確的權限。這是一個描述在這種情況下可以做什麼的相關執行緒。但我不想修復遠端伺服器。我只希望 SSH 失敗並在失敗時退出並
non-zero
返回程式碼SSH key authentication
。任何想法如何解決這個問題?
提前致謝。
按照建議,
ssh
有一個-o batchmode=yes
選項可以阻止任何互動。
- 不問密碼
- 沒有確認外國簽名
如果沒有建立連接,這將導致錯誤程式碼。
timeout
除了 limitssh
的執行時,您還可以使用:
timeout 10 ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit returncode=$?
或者
timeout --preserve-status 10 ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit returncode=$?
一定要選擇一個好的超時。2秒
ConnectTimeout
加8秒跑exit
就夠了;即使在高負載。