網頁

2017年3月10日 星期五

SSH 登入免密碼

自從兒子上大學後免不了要連線到學校協助解決一些"課業"上的問題,既然是用連線那就需要用到SSH,但每次SSH登入都需要輸入密碼,對於我這懶人來說是有點麻煩,(這學校密碼錯誤太多次 ip會被鎖住) 所以如何可以快速登入呢? 這裡介紹一個方式就是在Client端產生一組金鑰,然後把把公開金鑰複製到Server的信任名單中,如此一來client端在連線的時候Server端會檢查這組金鑰如果符合自然就不需要密碼了。
要連接SSH的 client端(本機)需要產生一組主機使用的金鑰組。這組金鑰可以在 ~/.ssh 中找到,檔名是 id_rsa (私鑰),id_rsa.pub (公鑰),一般來說公鑰的檔名像是這樣:
~/.ssh/id_rsa.pub
把公鑰複製到server端的信任名單,通常會是這樣:
~/.ssh/authorized_keys

接下來就示範如何操作
1. 在client端產生金鑰 輸入下面指令 ssh-keygen -t rsa 參數 -t 是指定密碼類型,如果沒有則內定是SSH-2的RSA "Enter passphrase"的地方請直接壓enter,這樣才能不用輸入密碼。 過程中會顯示金鑰的指紋(fingerprint)與 randomartRSA-01.jpg
到~./ssh 目錄下查看,會產生兩個檔案分別是id_rsa 和 id_rsa.pub, id_rsa是私鑰(private key): 這是要保護好的金鑰,它等同於你的密碼,放在自己的電腦中。 id_rsa.pub是公鑰(public key): 這是可以對外公開的金鑰,之後要將它放在遠端的 Linux 伺服器上作認證使用。 RSA-2.jpg

2. 接著把公鑰的內容放在Server的信任清單中 在 client端下以下指令,金鑰就會放進Server的信任清單中了。
cat ~/.ssh/id_rsa.pub | ssh server-user@server-host “cat >> ~/.ssh/authorized_keys"

也可以用 ssh-copy-id 的方式直接將金鑰複製到 server,它預設會將 ~/.ssh/id_rsa.pub 這個公開金鑰複製到伺服器上 ,輸入 ssh-copy-id User@Host
若要指定使用的金鑰,可以使用 -i 參數:
ssh-copy-id -i ~/.ssh/id_rsa.pub User@Host

以上兩個步驟做完後下次登入這台SSH主機就不用輸入密碼囉。

補充一下:
Server端的公鑰原始是有寫入權限的,這樣會蠻不安全的,建議可將authorized_keys設定成唯讀。
RSA-3.jpg