要遠端在 Linux 主機上執行指令,可以透過 SSH 來處理,不過每次執行指令都需要做身分認證,這讓操作上變得繁瑣,這裡提供一種方式,使用 ssh-keygen 建立一組身分認證的金鑰,藉此讓 SSH 遠端執行指令時,直接藉此做身分認證,讓操作更順暢。

SSH 金鑰和密碼一樣是一種身份驗證憑據,請做好保存及管理,避免遭到竊取、盜用。

以下以 Windows 為使用者的操作系統作範例,有四個步驟:

1 建立身分憑證

在 Windows 10 以上的作業系統,都內建了 ssh-keygen 這個工具,可以在終端機中執行以下指令:

ssh-keygen

預設情況下,這工具會在你的使用者主目錄下的 .ssh 資料夾中建立 SSH 金鑰,而這個金鑰檔案的名稱會根據所使用的加密演算法做命名,例如使用 RSA 演算法時,公鑰檔名會叫做 id_rsa.pub 私鑰叫做 id_rsa

請注意!請妥善保管這兩個檔案,尤其是私鑰。

2 將公鑰複製到遠端主機

接著我們要將公鑰複製到遠端 Linux 主機,讓之後的連線可以藉此做身份認證。

你可以用任何方式將 id_rsa.pub 公鑰的內容複製到遠端主機,要記得複製之後會登入的帳號下的家目錄中的 .ssh 資料夾中的 authorized_keys 檔案中。

這裡提供一個透過指令寫入的方式:

type C:\Users\USERNAME\.ssh\id_rsa.pub | ssh user@linux-host "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1" 

這行指令會先使用 type 取得 C:\Users\USERNAME\.ssh\id_rsa.pub 這個公鑰檔案的內容,再透過 | 管線指令傳送給 ssh,ssh 會使用 user@linux-host 這組遠端主機的帳號做登入,並將前面取得的內容寫入到 authorized_keys 檔案中。

過程中會需要輸入登入密碼。

這個步驟的路徑 (C:\Users\USERNAME\.ssh\)、登入帳號 (user)、遠端主機位置 (linux-host),請根據你的需求自行變更。

3 檢查是否有成功複製

檢查一下遠端主機的 .ssh/authorized_keys 內容是否有我們的公鑰,基本上應該會長得像下面這樣:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnvYlVooXXXXXXXXXXXX

4 測試

最後,我們可以簡單測試一下,執行下面這個指令應該要能列出所有 /tmp 資料夾下的所有內容,而且過程中不用輸入密碼!

ssh user@linux-host "ls -al /tmp/"

參考資料:


Poy Chang

Trial and Error