2010-06-28

ssh 遠端登入免密碼 with RSA

當凍仁還是專題生時,Shawn 學長曾提過 ssh 可用金鑰連線,這樣就不怕會被鎖在家門外,那時有用個登入三次失敗帳號會上鎖的機制,最近凍仁才知道這用到了大學資訊安全課堂上提過的公開金鑰加密 (RSA 演算法),也就是先將公開金鑰 (public key) 給對方,之後的通訊將透過此 public key 加密,之後再用私鑰 (private key) 解密。

密碼學與網路安全一書簡報。

1. 建立 RSA 金鑰。
jonny@client:~$ ssh-keygen -t rsa [Enter]
# PubkeyAuthentication: RSA key for SSH2
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jonny/.ssh/id_rsa): [Enter]
Created directory '/home/jonny/.ssh'.
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in /home/jonny/.ssh/id_rsa.
Your public key has been saved in /home/jonny/.ssh/id_rsa.pub.
The key fingerprint is:
37:e7:80:1a:77:fe:85:ea:12:7a:ef:bf:b3:ca:11:b8 jonny@debian
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|         o       |
|      . S * .    |
|       +.= * .   |
|      ..E.o o .  |
|      . o. +..   |
|       . =Bo=+   |
+-----------------+

# id_rsa.pub = public key.
# id_rsa = private key.

2. 新增 public key 至遠端 Server。
jonny@client:~$ cat .ssh/id_rsa.pub | ssh \
jonny@server.exmample.tw "cat - >> .ssh/authorized_keys" [Enter]

# jonny = user name.
# server.exmample.tw = Domain name or IP address.

3. ssh 免密碼遠端登入。
jonny@client:~$ ssh server.exmample.tw [Enter]

切記 id_rsa 要妥善保管,不然會被闖空門。

接下來可以用 rsync 之類的小程式寫一堆 Shell scripts 來異地備份,凍仁是都會先將 Server 的 $PS1 跟 Client 來點顏色區別,才不會發生關錯機的烏龍事件。

2011-01-05


近來遇到權限問題,同時也是超容易忽略的問題

  • 目錄 $HOME/.ssh/ 必須為 drwx------
  • 檔案 $HOME/.ssh/authorized_keys 必須為 -rw-r--r--

不然在 putty 上會有「Server refused our key」拒絕金鑰的錯誤訊息,至於要不要 restorecon 就不確定了。

預設權限 (umask) 的部份 CentOS 5 為 0002,而 Debian 6 則是 0022,看出來了嘛?這在手動建立的情形下會差很多!看了下表以後就會知道為什麼 Debian 可以無痛免 key 登入了!

TypeCentOSDebian
Directorydrwxrwxr-xdrwxr-xr-x
File-rw-rw-r---rw-r--r--

2015-08-25


當遠端 Server 的家目錄 ($HOME) 的 file-system 權限 (permission) 大於 755 時也會造成無法使用之情形。
# 700: work
jonny@server:~$ $ ls -l /home/ [Enter]
total 4
drwx------. 10 jonny jonny 4096 Aug 24 08:59 jonny

# 750: work
jonny@server:~$ $ ls -l /home/ [Enter]
total 4
drwxr-x---. 10 jonny jonny 4096 Aug 24 08:59 jonny

# 755: work
jonny@server:~$ $ ls -l /home/ [Enter]
total 4
drwxr-xr-x. 10 jonny jonny 4096 Aug 24 08:59 jonny

# 775: not work
jonny@server:~$ $ ls -l /home/ [Enter]
total 4
drwxrwxr-x. 10 jonny jonny 4096 Aug 24 08:59 jonny

# 777: not work
jonny@server:~$ $ ls -l /home/ [Enter]
total 4
drwxrwxrwx. 10 jonny jonny 4096 Aug 24 08:59 jonny

# 若有更動過 sshd_config 裡的 authorized_keys 路徑,則其上層目錄的 file-system 權限皆需留意一下 。

2016-11-10


如果以上操作後還是遇上無法正常使用 ssh key 登入的話,不仿再次確認一下 server 上的 ~/.ssh/authorized_keys 是否設置正確,凍仁前幾天才在 OpsWorks 上踏到第 2 把 key 沒有正確換行的雷。

相關連結:
公開鑰匙密碼學與 RSA 簡報 by 密碼學與網路安全
Debian Reference - 6.9.3. Connecting without remote passwords
Debian 參考手冊 | 9.5.3 以少許密碼連線 – RSA
Putty 的 Server refused our key | richliu`s blog
檔案預設權限:umask | 鳥哥的私房菜