Windows 使用 SSH 金鑰免密碼登入 Linux
如何透過 Linux 建立的公開金鑰加密 (非對稱金鑰加密),提供 Windows 7/8/10 使用 SSH Private Key 讓 PuTTY、PieTTY、WinSCP 軟體,以及 OpenSSH Client 免密碼登入 Linux。
原理
透過公開金鑰加密 (Public-key cryptography) 或稱「非對稱金鑰加密」的兩把加解密鑰匙 Public Key (公鑰) 和 Private Key (私鑰),取代 Client 使用 SSH (Secure Shell,安全殼協議) 協定連結 Server 登入時必須輸入驗證密碼的動作:
- Public Key:存放於 Server,路徑與檔名必須依據 /etc/ssh/sshd_config 內的 AuthorizedKeysFile 定義來設定。
- Private Key:存放於 Client,用來解密 Server 的 Public Key,因此只要誰擁有 Private Key 就能夠 SSH 連結且免密碼直接登入 Server,所以 Private Key 非常重要,不可外流。
系統環境
- Server:Linux (CentOS 7)。
- Client:Windows 7 / 10。
Linux (Server)
建立金鑰
以當前登入身份建立金鑰,預設會在家目錄下的 .ssh/ 產生這兩把金鑰檔 :
ssh-keygen
Generating public/private rsa key pair. Enter file in which to save the key (/home/jacky/.ssh/id_rsa): # 儲存金鑰路徑和檔名,使用預設直接 Enter Created directory '/home/jacky/.ssh'. # 產生 .ssh 目錄 Enter passphrase (empty for no passphrase): # 不建立密碼,直接 Enter Enter same passphrase again: # 密碼確認,直接 Enter Your identification has been saved in /home/jacky/.ssh/id_rsa. # Private Key 存放路徑 Your public key has been saved in /home/jacky/.ssh/id_rsa.pub. # Public Key 存放路徑 The key fingerprint is: SHA256:P9W8LMj/6qQDHBdGFTwywEMA+6NXjf4XzNbPgk0///U jacky@mes.xxx.com.tw The key's randomart image is: +---[RSA 2048]----+ | ...+oo.oo. | | . o = o | | . o + . | | . .o. o | | o.So.o..o | | . +oo o=.o. | | . . ..=.o=o+.| | . ..=o.o.*| | o++o..E| +----[SHA256]-----+
Public Key 路徑與檔名
Public Key 儲放的路徑與檔名必須依據 /etc/ssh/sshd_config 內的 AuthorizedKeysFile 定義來設定:
sudo cat /etc/ssh/sshd_config | grep AuthorizedKeysFile
AuthorizedKeysFile .ssh/authorized_keys
依 /etc/ssh/sshd_config 設定檔更改 Public Key 檔名:
mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
權限
建立的兩把金鑰,雖然預設的權限就都是正確的了,但還是有必要了解一些規則,因為只要一個設定有誤,就可能會被判定為危險,而造成 Public Key 和 Private Key 無法順利比對:
- ~/.ssh/ (目錄):權限必須為 700 (drwx------)。
- ~.ssh/authorized_keys (Public Key)
- 權限必須為 644 (-rw-r--r--)。
- 擁有者必須屬於本身帳戶才行。
檢查權限設定:
ls -ld ~/.ssh; ls -l ~/.ssh
drwx------. 2 jacky jacky 43 12月 7 06:17 /home/jacky/.ssh 總計 8 -rw-r--r--. 1 jacky jacky 405 12月 7 06:00 authorized_keys -rw-------. 1 jacky jacky 1831 12月 7 06:00 id_rsa
Windows (Client)
取得 Private Key
使用 WinSCP 連結 Linux,取得在 Linux 產生的 Private Key。
使用 Private Key SSH 連結 Linux
軟體
在 Windows 要讓 PuTTY、PieTTY 或 WinSCP ... 軟體可使用 Private Key 來 SSH 連結 Linux,必須先透過 PuTTYgen 將在 Linux 產生的 Private Key 轉換成 Windows 系統可識別的 *.ppk 才可正常使用。
選擇要轉換成 *.ppk 的 Private Key 檔:
儲存轉換成 *.ppk 的 Private Key:
自訂檔名,但副檔名必須為 *.ppk:
OpenSSH Client
Windows 也是透過和 Linux 相同的 OpenSSH,因此不須像軟體還要轉換在 Linux 產生的 Private Key 即可直接使用。
ssh
指令可參考 Visual Studio Code 使用 Remote - SSH 開啟遠端 Linux 資料夾執行 ssh
指令時會自動到使用者家目錄的 .ssh/ 目錄下尋找有無可用的 Private Key,因此我們要將 Private Key 移到這:
開啟 CMD 執行指令 ssh
+ 登入帳戶 + @ + Server 位址,即可免密碼直接登入 Linux Server:
ssh jacky@220.xxx.84.xxx
The authenticity of host '[220.xxx.84.xxx]:22 ([220.xxx.84.xxx]:22)' can't be established. ECDSA key fingerprint is SHA256:d2UxxxxxgbE1/xxxxxQ7MrZxxxxx8EtcfxxxxxN/Y/Y. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[220.xxx.84.xxx]:22' (ECDSA) to the list of known hosts. Web console: https://mes.xxx.com.tw:9090/ or https://192.168.1.232:9090/ Last login: Sat Dec 7 06:34:47 2019 from 61.xxx.180.xxx [jacky@localhost ~]$
如有多個 Private Key 可使用 -i
參數指定要使用的 Private Key 檔:
ssh jacky@220.xxx.84.xxx -i C:\Users\%USER%\Desktop\id_rsa
如果不是使用 SSH 預設的 22 port,可使用 -p 參數指定 port:
ssh jacky@220.xxx.84.xxx-p 3222
參考
本著作係採用創用 CC 姓名標示-相同方式分享 3.0 台灣 授權條款授權.
在〈Windows 使用 SSH 金鑰免密碼登入 Linux〉中有 2 則留言