摘自 鳥哥的 Linux 私房菜
http://linux.vbird.org/linux_server/0310telnetssh.php
1. 用戶端建立兩把鑰匙:
建立的方法很簡單,在 clientlinux.centos.vbird 這部主機上面以 vbirdtsai 的身份來建立兩把鑰匙即可。 不過,需要注意的是,我們有多種密碼演算法,如果不指定特殊的演算法,則預設以 RSA 演算法來處理:
[vbirdtsai@clientlinux ~]$ ssh-keygen [-t rsa|dsa] <==可選 rsa 或 dsa
[vbirdtsai@clientlinux ~]$ ssh-keygen <==用預設的方法建立金鑰
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vbirdtsai/.ssh/id_rsa): <==按 enter
Created directory '/home/vbirdtsai/.ssh'. <==此目錄若不存在則會主動建立
Enter passphrase (empty for no passphrase): <==按 Enter 不給密碼
Enter same passphrase again: <==再輸入一次 Enter 吧!
Your identification has been saved in /home/vbirdtsai/.ssh/id_rsa. <==私鑰檔
Your public key has been saved in /home/vbirdtsai/.ssh/id_rsa.pub. <==公鑰檔
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08
[email protected]
[vbirdtsai@clientlinux ~]$ ls -ld ~/.ssh; ls -l ~/.ssh
drwx------. 2 vbirdtsai vbirdtsai 4096 2011-07-25 12:58 /home/vbirdtsai/.ssh
-rw-------. 1 vbirdtsai vbirdtsai 1675 2011-07-25 12:58 id_rsa <==私鑰檔
-rw-r--r--. 1 vbirdtsai vbirdtsai 416 2011-07-25 12:58 id_rsa.pub <==公鑰檔
請注意上面喔,我的身份是 vbirdtsai ,所以當我執行 ssh-keygen 時,才會在我的家目錄底下的 .ssh/ 這個目錄裡面產生所需要的兩把 Keys ,分別是私鑰 (id_rsa) 與公鑰 (id_rsa.pub)。 ~/.ssh/ 目錄必須要是 700 的權限才行!另外一個要特別注意的就是那個 id_rsa 的檔案權限啦!他必須要是 -rw------- 且屬於 vbirdtsai 自己才行!否則在未來金鑰比對的過程當中,可能會被判定為危險而無法成功的以公私鑰成對檔案的機制來達成連線喔。 其實,建立私鑰後預設的權限與檔名放置位置都是正確的,你只要檢查過沒問題即可。
2. 將公鑰檔案資料上傳到伺服器上:
因為我們要登入 www.centos.vbird 是以 dmtsai 的身份,因此我們就得要將上個步驟建立的公鑰 (id_rsa.pub) 上傳到伺服器上的 dmtsai 用戶才行。那如何上傳呢?最簡單的方法當然就是使用 scp 嘛!
[vbirdtsai@clientlinux ~]$ scp ~/.ssh/id_rsa.pub
[email protected]:~
# 上傳到 dmtsai 的家目錄底下即可。
3. 將公鑰放置伺服器端的正確目錄與檔名:
還記得 sshd_config 裡面談到的 AuthorizedKeysFile 這個設定值吧?該設定值就是在指定公鑰資料應該要放置的檔名囉!所以,我們必須要到伺服器端的 dmtsai 這個用戶身份下, 將剛剛上傳的 id_rsa.pub 資料附加到 authorized_keys 這個檔案內才行。作法有點像這樣:
# 1. 建立 ~/.ssh 檔案,注意權限需要為 700 喔!
[dmtsai@www ~]$ ls -ld .ssh
ls: .ssh: 沒有此一檔案或目錄
# 由於可能是新建的用戶,因此這個目錄不存在。不存在才作底下建立目錄的行為
[dmtsai@www ~]$ mkdir .ssh; chmod 700 .ssh
[dmtsai@www ~]$ ls -ld .ssh
drwx------. 2 dmtsai dmtsai 4096 Jul 25 13:06 .ssh
# 權限設定中,務必是 700 且屬於使用者本人的帳號與群組才行!
# 2. 將公鑰檔案內的資料使用 cat 轉存到 authorized_keys 內
[dmtsai@www ~]$ ls -l *pub
-rw-r--r--. 1 dmtsai dmtsai 416 Jul 25 13:05 id_rsa.pub <==確實有存在
[dmtsai@www ~]$ cat id_rsa.pub >> .ssh/authorized_keys
[dmtsai@www ~]$ chmod 644 .ssh/authorized_keys
[dmtsai@www ~]$ ls -l .ssh
-rw-r--r--. 1 dmtsai dmtsai 416 Jul 25 13:07 authorized_keys
# 這個檔案的權限設定中,就得要是 644 才可以!不可以搞混了!
這樣就搞定金鑰系統囉!以後你從 clientlinux.centos.vbird 的 vbirdtsai 登入到 www.centos.vbird 的 dmtsai 用戶時, 就不需要任何的密碼囉!舉例來說,你可以這樣測試看看囉:
例題:
透過上述的案例練習成功後,請在 clientlinux 的 vbirdtsai 身份中,將系統的 /etc/hosts* 檔案複製給 www.centos.vbird 的 dmtsai 用戶的家目錄。
答:
[vbirdtsai@clientlinux ~]$ scp /etc/hosts*
[email protected]:~
hosts 100% 187 0.2KB/s 00:00
hosts.allow 100% 161 0.2KB/s 00:00
hosts.deny 100% 347 0.3KB/s 00:00
# 你會發現,原本會出現的那個密碼提示資料不會出現了喔!
[vbirdtsai@clientlinux ~]$ ssh
[email protected] "ls -l"
-rw-r--r--. 1 dmtsai dmtsai 196 2011-07-25 13:09 hosts
-rw-r--r--. 1 dmtsai dmtsai 370 2011-07-25 13:09 hosts.allow
-rw-r--r--. 1 dmtsai dmtsai 460 2011-07-25 13:09 hosts.deny
-rw-r--r--. 1 dmtsai dmtsai 416 2011-07-25 13:05 id_rsa.pub
# 確實有複製到對方去了!有顯示出正確的遠端資料哩!
很簡單的步驟吧!這樣一來,使用 ssh 相關的用戶端指令就可以不需密碼的手續了!無論如何,在建立金鑰系統的步驟中你要記得的是:
Client 必須製作出 Public & Private 這兩把 keys,且 Private 需放到 ~/.ssh/ 內;
Server 必須要有 Public Key ,且放置到使用者家目錄下的 ~/.ssh/authorized_keys,同時目錄的權限 (.ssh/) 必須是 700 而檔案權限則必須為 644 ,同時檔案的擁有者與群組都必須與該帳號吻合才行。
未來,當你還想要登入其他的主機時,只要將你的 public key (就是 id_rsa.pub 這個檔案) 給他 copy 到其他主機上面去,並且新增到某帳號的 ~/.ssh/authorized_keys 這個檔案中!哈哈!成功!