2008年3月25日 星期二

如何製作 ssh 的鑰匙

使用 puttygen 製作鑰匙
  1. 點選 PUTTYGEN.EXE 程序 (官網下載頁面)。
  2. 在 Parameters 一欄選擇 Key 類型為「SSH2 DSA」。( 其實這裡的三個選項都可以選,主要式配合你的 ssh )
  3. 點擊 Generate 按鈕。
  4. 在空白處隨機移動鼠標用以產生隨機數據。這些隨機數據將被 Puttygen.exe 用來產生安全的 KEY (密鑰),收集到足夠的隨機數據密鑰就會產生。
  5. 基本上此時鑰匙以建立完成,但若你考慮在鑰匙上加上安全機制,可在"Key passphrase" 和 "Confirm passphrase"處輸入密碼,為你的私鑰加密,當然你也可以選擇不輸入密碼;當使用者利用私鑰要登入伺服器時,會被問起這組密碼。
  6. 保存這對鑰匙,Save private key 保存私鑰,Save public_key 保存公鑰,保存私鑰的附檔名為 .ppk,此文件就是客戶端要使用的私鑰,若你沒有設定 passphrase ,在儲存私鑰同時會詢問 passphrase 是否空白 。基本上,公鑰可以不儲存,可以將文字方塊中的那一長串文字複製於 authorized_keys 中,若真的遺失了,可用 load 私鑰的方式產生公鑰。
  7. Puttygen會在 key 文字方塊中產生一對亂碼,將整段複製,貼於個人資料夾中的 .ssh/authorized_keys ,以下為公鑰範例。
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAz7y1oBJiH6yuW6hOWu3jzTPYOJ5MRwvhvM6pcK9+NAjj8nJk9Msvpt7fwBoQyBNuXN/fZTneUxL16rYbeVQ8M2xWUZ0QbB38aCSRkM3iUaD/JuPXrfGkTsSEvwsztr+jyz8/SCeOiaZ7YXoCUUoTobJ2l4R43C8y6m7Y8DivH/k= rsa-key-20080514

增加使用公鑰的限制

在公鑰的亂碼前加入 from 或 command,可以限制使用公鑰的指令與來源IP如下
from="192.168.101.10" ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAz7y1oBJiH6yuW6hOWu3jzTPYOJ5MRwvhvM6pcK9+NAjj8nJk9Msvpt7fwBoQyBNuXN/fZTneUxL16rYbeVQ8M2xWUZ0QbB38aCSRkM3iUaD/JuPXrfGkTsSEvwsztr+jyz8/SCeOiaZ7YXoCUUoTobJ2l4R43C8y6m7Y8DivH/k= rsa-key-20080514

ssh-keygen 製作鑰匙

首先決定要使用這把公鑰的用戶(可以是 root),並切換至用戶目錄下。
bang@linuxdiary:~$ su bang
bang@linuxdiary:~$ cd ~
產生鑰匙,如同 puttygen,會產生一對鑰匙,公鑰與私鑰,-t 為產生格式,有一般可選擇 dsa 或 rsa,在產生時,系統會詢問你存放地點與使用密碼,你可以直接 Enter 略過,不設密碼,代表使用私鑰時,不須密碼。
bang@linuxdiary:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):/root/.ssh/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /bang/.ssh/id_rsa.
Your public key has been saved in /bang/.ssh/id_rsa.pub.
The key fingerprint is:
f4:b4:55:93:89:f7:d5:b0:4a:38:39:76:36:6c:a4:b6 bang@192.168.1.10

以下是容易忘記的地方,必須完成幾個重要的權限設定,最後將公鑰匯入 authorized_key
bang@linuxdiary:~$ chmod 700 .ssh
bang@linuxdiary:~$ cd .ssh
bang@linuxdiary:.ssh$ touch authorized_keys
bang@linuxdiary:.ssh$ chmod 600 authorized_keys
bang@linuxdiary:.ssh$ cat id_dsa.pub > authorized_keys
有關於私鑰的使用

在Linux上的使用方法,根據 /etc/ssh/ssh_config 的設定,私鑰放置預設路徑為 ~/.ssh/id_rsa
故製作完私鑰後,可以將私鑰內容,複製於 ~/.ssh/id_rsa 之中,但 id_rsa 只能放一把鑰匙,若同時擁有多把主機鑰匙可用以下方式登入。

bang@linuxdiary:~$ ssh -i 鑰匙名稱 root@192.168.1.1
sshd.conf 的相關設定

IdentityFile ~/.ssh/id_rsa
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

IdentityFile: 私鑰檔的路徑與名稱
AuthorizedKeysFile:公鑰檔的路徑與檔名
RSAAuthentication:是否開啟 RSA 認證
PubkeyAuthentication:是否允許公鑰認證