︿
Top


前言

簡單來說,最近有個需求是要透過 Putty 同時 SSH 連線並登入多台特定主機,例如,同一組使用者帳號和密碼,但要登入 20 台主機,該如何加快整個登入主機的流程? 雖然,Putty 可以透過儲存 Sessions 的方式,讓整個開啟並連線主機的流程加快,然而它還是 1:1 的特性,所以無法滿足需求。因此,本篇筆記就出現了。
本文實作環境中,採用「密碼」登入連線主機的方式 (如果,這些機器是我所管理的,當然就會是使用 SSH Key 登入的方式,而非鍵入密碼的方式登入了!!)。



執行結果

首先,請把需要 SSH 連線登入的主機,寫入到 ssh_hosts.txt 主機清單文件中。

在密碼的部份,採用 Get-Credential 的方式,以便彈出視窗方便鍵入 SSH 連線登入的使用者帳號和密碼 (你應該不可能直接把明文密碼寫在 PowerShell 內吧! 😈)。值得注意的是,透過 Get-Credential 方式儲存的密碼為 SecureString 的方式,所以必須在過程中進行解開,然後再送給 $Password 變數以便稍後使用。

另外一個注意的部份,當 Putty 第一次連線主機時,會彈出 Yes / No / Cancel 詢問 視窗,是否要把主機加入至 Know host 清單中,當點選 Yes 時,便會把主機資訊寫入至 Computer\HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys 機碼路徑內。但是,這個步驟會中斷我們自動 SSH 連線多台主機流程。

所以,這就是第 28 行內容 $Wshell.SendKeys("Y") 的用意了 (送出 Y,達到自動回答 Yes 的目的),至於為何要先休息 1 秒才送出 Y 呢? 原因在於,等待 Putty.exe 執行後才送出 Y,否則可能遭遇到 Putty.exe 還沒執行好,系統就送出 Y 然後連線流程就卡住了。



最後,則是把主機清單中 SSH 連線失敗的部份,用「紅色字體」顯示在 PowerShell 視窗中並寫入<今天日期>_ssh_failed_hosts.txt 檔案內。




SSH_Hosts_via_Putty.ps1




文章標籤: