2016/05/25

ssh keygen and management

常使用 ssh 連去遠端工作,連遠端時在 windows 我使用 xshell,他有工具可以幫我記帳密,只要點選便可以連結,但在我 ubuntu 的工作環境使用 terminal 的時候,必須打完整的指令 ssh root@chan15.info,然後再輸入密碼,是不會很麻煩啦,但目前專案越來越多跟需另開視窗同一 server 啟用 node.js 服務越來越頻繁的情況,希望可以減少輸入的頻率,最簡單的方式就是用金鑰,可以免輸入密碼,接下來是建構介紹

建立配置金鑰

金鑰的概念是,你在本基上 generate 一組 public key 跟 private key,然後將 public key 置入 remote server 中,你就可以用你的 private key 登入該 remote server,在 Linux 環境有 ssh-keygen 指令可以建立,在 windows 的話,很多 Linux 模擬器例如 cmder,xshell 本身也有 gen 的功能,或者是使用 puttygen,都是在做一樣的事情,這邊我使用 key-gen 來做。

# 先切換到自己帳號的目錄,並建立一個 .ssh 的資料夾
# Windows 的話會是 C:\Users\root\.ssh
# Linux 的話就是 /home/root/.ssh

$ ssh-keygen -t rsa - C "chan15tw@gmail.com"

# 這邊會問你名稱,我要連到自己的 chan15 server,所以我取名為 chan15 然後按下 enter
$ Enter file in which to save the key (/c/Users/kr141101/.ssh/id_rsa):chan15

# 接著問你要不要密碼,可以跳過
$ Enter passphrase (empty for no passphrase):

# 看到這個畫面就表示成功了
$ Your identification has been saved in chan15.
$ Your public key has been saved in chan15.pub.
$ The key fingerprint is:
$ SHA256:IrXB6LfAtW7rFMJlIRjrx+JWaty2nLKNc0jrFM0+9nc chan15tw@gmail.com
$ The key's randomart image is:
$ +---[RSA 2048]----+
$ |  .o. ..         |
$ |   o+.  . E      |
$ |   +.o . .       |
$ |  . + =o         |
$ |   . Bo.S        |
$ |  o.B o.         |
$ |  .BoB.o . .     |
$ |  o+O.*o+.o .    |
$ |   +BO.++o..     |
$ +----[SHA256]-----+

# 資料夾會有 chan15 以及 chan15.pub,兩個檔案,看一下 chan15.pub 有什麼
$ cat chan15.pub
$ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC91YXEW08rAIzVc3xS5owRsIBizSlZJvkaJcddZEGP3XrQk+3fC0lDpMdXR2UfoIMdFQbMHETcsfeuEgivjUzqppA7QRcxV/uCbrfRtrz38nR9Nu/celqUPTEF2k1RjyK19acsTOOaX/hS8KFBw91HnENAUUpFtmjMXEsgPern9YV3DcgFBxKrgtg13lnzDoSVVYdmqqqxZG6OggJE6r27lF9BIfz8fdcuGBMbNx5DvivEu/h6Hejj0ax9N5DAqJhSCASSkd+dRYUur7OMptvM05UDgl/zAuRWlT9jO38yMvMBFztcyAPUGeVANV6nG0Kbr2GQe9T5Hi1wtf1y/yCX chan15tw@gmail.com

網路上很多將 pub key 加到 remote server 的方法,像是用 cat,用 scp 等等的,但最妥當沒風險的,就是你直接打開 remote server,然後找到 /home/root/.ssh/authorized_keys,將 pub key 加到裡面去,如果你沒有這個檔案,還可以自行創立,然後將權限設定為 600。

連線管理與配置

接下來我們就可以用指令連線到 remote server

$ ssh -i chan15 root@chan15.info

這個指令意思就是使用 chan15 這個 private key 去連線到 remote,而 remote 那邊會去找 root 根目錄 authorized_keys 有沒有對應的 key,有的話就會 pass,但樣指令還是太長,我們可以透過設定 config 將指令縮短,打開 local /hoem/root/.ssh/,建立一個叫 config 的檔案,內容如下:

Host chan15
    HostName chan15.info
    User root
    IdentityFile /home/root/.ssh/chan15

這樣設定好以後只要執行 ssh chan15 就可以連線了,是不是很方便。

參考文章

https://blog.longwin.com.tw/2005/12/ssh_keygen_no_passwd/
http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/

沒有留言: