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 key
  • id_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
2
sudo nano /etc/ssh/sshd_config #edit sshd_config
PasswordAuthentication no

請重啟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
2
3
4
Host test
HostName 192.168.1.103
User ServeraccountName
Compression yes

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
2
3
4
chmod 700 /home/chenchih/.ssh
chmod 600 /home/chenchih/.ssh/authorized_keys
chmod 600 /home/chenchih/.ssh/id_rsa # Only if you copied id_rsa there
chmod 644 /home/chenchih/.ssh/id_rsa.pub

如果你用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
2
3
4
5
#server(server) 
cat id_rsa #copy private key
#local side
touch id_rsa
vi id_rsa #paste the private key content

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