前言
簡單來說,最近有個需求要透過 Windows Terminal 同時 SSH 連線並登入多台特定主機,例如,同一組使用者帳號和密碼,但要登入 20 台主機,該如何加快整個登入主機的流程?因此,本篇筆記就出現了。本文實作環境中,採用「密碼」登入連線主機的方式 (如果,這些機器是我管理的,當然就會是使用 SSH Key 登入的方式,而非鍵入密碼的方式登入!!)。
習慣採用 Putty 的朋友,可以參考站內另一篇 PowerShell - 透過 Putty 同時 SSH 連線登入多台特定主機 文章。
執行結果
首先,請把需要透過 Windows Terminal SSH 連線登入的主機,寫入到
ssh_hosts.txt
主機清單文件中。
在密碼的部份,採用
Get-Credential
的方式,以便彈出視窗方便鍵入準備 SSH 連線登入的使用者帳號和密碼
(你應該不可能直接把明文密碼寫在 PowerShell 內吧!)。由於,透過
Get-Credential
方式儲存的密碼為 SecureString 的方式,所以必須在過程中進行解開,然後再送給
$Password 變數以便稍後使用。
- Microsoft Docs - PowerShell - Get-Date
- Microsoft Docs - PowerShell - Get-Credential
- Microsoft Docs - PowerShell - New-Object
- Microsoft Docs - PowerShell - Get-Content
- Microsoft Docs - PowerShell - Test-Connection
- Microsoft Docs - PowerShell - Start-Process
- Microsoft Docs - PowerShell - Start-Sleep
- Microsoft Docs - PowerShell - Write-Host
- Microsoft Docs - PowerShell - Out-File
另外一個注意的部份,當 Windows Terminal 第一次連線主機時,會詢問是否要把主機加入至 Know host
清單中,可以透過「-o StrictHostKeyChecking=no」參數直接允許並加入即可,屆時系統便會把連線的主機加入至「"%USERPROFILE%\.ssh\known_hosts」內。
至於為何要先休息 5 秒才送出密碼和 Enter
呢? 原因在於,等待系統開啟 Windows Terminal 之後,才執行送出密碼和 Enter 的動作,否則可能遭遇到 Windows Terminal 還沒啟動完成,系統就送出密碼和
Enter,然後因為送出和接收的時間不對連線流程就卡住了。
最後,則是把主機清單中連線失敗的部份,用「紅色字體」顯示在 PowerShell 視窗中並寫入<今天日期>_ssh_failed_hosts.txt
檔案內。