︿
Top


前言

簡單來說,最近有個需求要透過 Windows Terminal 同時 SSH 連線並登入多台特定主機,例如,同一組使用者帳號和密碼,但要登入 20 台主機,該如何加快整個登入主機的流程?因此,本篇筆記就出現了。
本文實作環境中,採用「密碼」登入連線主機的方式 (如果,這些機器是我管理的,當然就會是使用 SSH Key 登入的方式,而非鍵入密碼的方式登入!!)。
習慣採用 Putty 的朋友,可以參考站內另一篇 PowerShell - 透過 Putty 同時 SSH 連線登入多台特定主機 文章。



執行結果

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

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

另外一個注意的部份,當 Windows Terminal 第一次連線主機時,會詢問是否要把主機加入至 Know host 清單中,可以透過「-o StrictHostKeyChecking=no」參數直接允許並加入即可,屆時系統便會把連線的主機加入至「"%USERPROFILE%\.ssh\known_hosts」內。

至於為何要先休息 5 秒才送出密碼和 Enter 呢? 原因在於,等待系統開啟 Windows Terminal 之後,才執行送出密碼和 Enter 的動作,否則可能遭遇到 Windows Terminal 還沒啟動完成,系統就送出密碼和 Enter,然後因為送出和接收的時間不對連線流程就卡住了。



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




SSH_Hosts_via_WindowsTerminal.ps1



文章標籤: