Linux

如果公鑰身份驗證失敗,腳本化 ssh 不應要求輸入密碼

  • January 30, 2020

這是我的案例:我有一個腳本,列出了數百個伺服器並測試它們是否允許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就夠了;即使在高負載。

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