SSH利用Key登入
我想大家都知道SSH是什麼,也很多人應該已經會用SSH Key可以免輸入密碼就可以SSH登入。我想信大家用github應該都會用,但我今天不是要用github 我要用ubuntu 當作SERVER, window 當做client. 其實做法是一樣,github server當作我自己ubuntu server。
很多時候你用github可能一些server上運作可能你不太知道背後的運動是如何,今天可以介由者個範例可以理解更多以真實server
請務必先安裝 openssh 能用
1 | sudo apt install openssh-server |
- 公鑰跟私鑰是一組,這樣才可以連線,他們會做連結
- Private Key 私鑰: 要存在你自己電腦
- Public Key 私鑰: 要放在本地端要連到Sever。
client建Key
這個方式是最常用的方式,就跟github 一樣,本地端會建private 和public key,然後把public key 傳到 server上面並加入 Server 上的 ~/.ssh/authorized_keys
檔案中。)
以這個範例我本地端(Local/Client)要用SSH遠端到Server端,我需要把我的公鑰(public key)傳到Server這樣私鑰做連線會跟Server公鑰比對,是同一組就會連線。
- 在 SSH 連線中,Client 會先產生一組公鑰(public key)和私鑰(private key)。
- 公鑰會放到 Server 上,而私鑰只保留在 Client。
當 Client 嘗試連線時,會使用私鑰(private key)來進行驗證,而Server 會利用它儲存的公鑰來驗證 Client 的私鑰是否正確,確認是同一對金鑰後,即可成功連線,我下面我教如何做到。
環境:
- Local PC:
window
- Server PC:
Ubuntu
這是一個基本架構,我Client 是用Window當做範例,你也可以用Linux當作範例,指令會不一樣,我會提供。

Step1: 建立Key
請檢查 home資料夾有沒有.ssh
資料夾,如果沒有請建立因為
在本地建Key會產生公鑰跟私鑰key可以用下面方式建立key,下面看你哪一個金鑰。
建立SSH,正常有安裝SSH應該會有:
- Linux:
mkdir -p ~/.ssh
- window:
mkdir "$HOME\.ssh"
可以建立KEY方法或看下面有不同方式
1 | ssh-keygen -t rsa -b 4096 |

Note:
-C
:-C "your_email@example.com"
可以選要加注意或不用
Enter fule in which to save the key: Key 檔名用預設或自己修改檔名
Enter passphrase: 如果不輸入按Enter就是沒設密碼。
RSA 加密算法
優點:通用、相容性最好
缺點:金鑰越長,速度越慢;2048-bit 現在略嫌不夠安全
類型:非對稱加密(老牌)
金鑰長度:建議用 4096 bits
1 | ssh-keygen -t rsa -b 4096 |
ED25519 加密算法
優點:小、快、安全性高
缺點:在舊系統(非常老)可能不支援
你也可以用下面比較加密比較強,可以建議用下面這個。
1 | ssh-keygen -t ed25519 |
Step2: 檢查看key也建成功
請用 ls
會發生會建立公鑰跟私鑰,如果你上面沒改檔名稱他會用Default:
id_rsa
: 私鑰 private keyid_rsa.pub
: 公鑰 public key
如果你是用ED25519 加密算法檔名會是id_ed25519

Step3 把公鑰傳到Server
我們要把本機端產生的 Public key 內容,加入到 Server 上的 ~/.ssh/authorized_keys
檔案裡。 如果是手動處理,可以把公鑰檔(例如 id_rsa.pub)裡的內容複製出來,貼到 Server 的 authorized_keys 檔案中。
我們用這個指令把本機端產生的 Public key 內容,傳到Server。你會發現傳上Server他已經是用authorized_keys
,請看下面途更清楚:
- window 方式傳到server (window method transfer public key to server)
1
type %USERPROFILE%\.ssh\id_rsa.pub | ssh chenchih@192.168.1.103 "cat >> .ssh/authorized_keys"
- Linux 方式傳到server (Linux method transfer public key to server)
1
ssh-copy-id -i id_rsa.pub root@192.168.1.103
你可以比對local 端的 id_rsa.pub 跟server 上的 pubic key authorized_keys
是一致:

Step 4 Server 修改sshd config 用key登入
我們需要在ubuntu sshd_config
(ssh config 檔案) 密碼用Key來登入,預設他是用密碼登入。如果將來你想改成用密碼登入也是這樣做。
修改檔案 modify file:
nano /etc/ssh/sshd_config
請把 #PasswordAuthentication no
的 #
移除掉如下面。Default 是 用密碼登入 PasswordAuthentication yes
跟#PasswordAuthentication no
是一樣意思就是login as password
1 | sudo nano /etc/ssh/sshd_config #edit sshd_config |
請重啟ssh server(restart ssh server)
1 | sudo systemctl restart sshd |

Step 5 Remote SSH to server
現在我們可以在本地端用SSH連到Server不需要密碼,但是注意只能用terminal or 終端機。
1 | ssh username@hostname |

Create ssh config
如果你有很多台server,也就是說很多帳號,密碼等等要記,如果之前用過第三方工具如Putty tera term等等,他們有功能可以存這些設定。其實可以在本機端建立 ssh config,把這些資料放進去,就有一樣效果。
在本機端建立一個 .ssh/config
然後把你個Server相關帳號和Host放進去如下面。Host 可以隨便改你想要的名稱,這就會是你要登入用的名稱。我是用test,所以我就會用 ssh test
remote 到server上,很方便。如果你有很多台,這分常實用
1 | Host test |

Server 建立Key
放面的範例是最常用,但如果你用在server建key,你就要把你的private key給對方,這種情況比較少會有人這樣用。這種方式比較多是用在系統上,如router等產品為了資安相關設定就會這樣做。那些產品都會有網頁,有些客戶不希望用密碼登入,因此就會這樣用。他會在她系統上建public and private key,然後會給你private key,你就可以透過他的private key連進它的系統,但你連進去也看無法看到SSH那一層。

Step1: Server 端建立 key
1 | ssh-keygen -t rsa -b 4096 |
Step2: 把 public key 導入 authorized_keys
你只要是要讓對方連近來,就需要把public key改成authorized_keys
1 | cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys |
Step 3 設定權限
個人覺得好像不需要做,可以SKIP,如果不能連再來設,但我還是提以下:
1 | chmod 700 /home/chenchih/.ssh |
如果你用root身分修改上面權限,請登出root然後下一般帳戶的權限
1 | sudo chown -R chenchih:chenchih /home/chenchih/.ssh |
Step4 SSH 重啟
1 | sudo systemctl restart sshd |
Step5 把你的private key複製到本端
你有多方式可以做:
- 複製id_rsa檔案 (FTP, SMB等等),放在本端
.ssh
目錄 - 複製id_rsa檔案內容,在本端
.ssh
目錄下建立檔案
1 | #server(server) |
Step 6 SSH 連線
這些做完就可以做連線
第三方工具 putty/terateam
上面方式都是用終端機,現在這裡我們要用第三方工具,我想信如果你們紀錄log或跑長時間等等可能都會用到第三方工具,但是如果要用key登入可能要做這些設定。它們的key檔案跟上面不太一樣。你也可以把登入改成密碼。接下來我來教如何用putty and terateam 用key login。我的範例會以本端的public key為主,也就是案例1位主,因為比較常用
Putty
請自行安裝Putty,一定要安裝不可以用簡易版本或免安裝版本,我要用到PuTTYgen.exe
這個工具,如果你安裝就會把這個也安裝進去
如果你登入選對的public key 會出現這樣錯誤訊息 No support authernication methods available

Step1 開啟PuTTYgen.exe
他會在putty.exe一樣目錄 C:\Program Files\PuTTY\
Step2 選取你的private key
請照下面照片做
如果你建key時有設定密碼,就不會出現圖片地4步

Step3 Save putty private key format
putty 有自己的 private key格式,檔案會是.ppk
,請照下面照片做

Step4 putty 選取你剛剛存的ppk 檔案
請照下面照片做,做完就可以連線

TeraTeam
Step1: 開啟terateam
請點選 setup>ssh authentication>
Step2: 選取private KEY設定
請照下面圖選取private key

Step3 SSH 連線
我在我的private key 有設定密碼,所以會跳出要我輸入密碼。如果你沒設定就不會跳出來

Reference
- https://phoenixnap.com/kb/generate-setup-ssh-key-ubuntu
- https://medium.com/@natlee_/ubuntu-%E8%88%87-windows-%E4%BD%BF%E7%94%A8-ssh-%E9%87%91%E9%91%B0%E5%BF%AB%E9%80%9F%E7%99%BB%E5%85%A5%E7%9A%84%E6%96%B9%E6%B3%95-823a8b0211e3
- https://www.cloudpanel.io/tutorial/set-up-ssh-keys-on-ubuntu-20-04/
- https://www.youtube.com/watch?v=ia86qxIajCM
- https://askubuntu.com/questions/46930/how-can-i-set-up-password-less-ssh-login