SSH Key的使用

我們常使用 SSH 的方式登入 Linux 主機,但是每次登入時,都要打密碼,有沒有方式可以不用輸入密碼就可以進入呢?
SSH KEY 的交換就是其中的一種方式.

步驟

進入 ssh 目錄

首先先到個人的 ssh 目錄

1
$ cd ~/.ssh

如果沒有這個目錄,需手動建一個
1
$ mkdir .ssh

建立新的 SSH key

產生一個新的 SSH key, 可以使用下列指令

1
$ ssh-keygen -t rsa

依照提示,輸入你的密碼後,就可以在 .ssh 目錄下看到 id_rsaid_rsa.pub , 這二個檔. id_rsa.pub 就是公鑰, id_rsa 則是私鑰

將公鑰放入主機

先把公鑰放到主機

1
$ scp ~/.ssh/*.pub [目的主機]:~/.ssh/.

登入主機
1
$ ssh [username]@[目的主機]

把公鑰存到主機。系統預設處理公鑰的檔案為 authorized_keys , 這個檔案必須把權限設為只有使用者具有寫的權限
1
2
3
$ cat ~/.ssh/identity.pub >> ~/.ssh/authorized_keys
$ chmod 711 ~/.ssh
$ chmod 644 ~/.ssh/authorized_keys

設定 ssh-agent

起動 ssh-agent

1
$ eval `ssh-agent -s`

新增 key
1
$ ssh-add

自動化執行

參考 Joseph M. Reagle Jr.

放在 .bash_profile 的 script

SH_ENV="$HOME/.ssh/environment"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn’t work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi

使用 ssh config 來對映多個 ssh 帳號

編輯 ~/.ssh/config , 如果沒有就建一個。文件格式為

1
2
3
4
Host [名稱]
HostName [主機名]
User [使用者登入ID]
IdentityFile [私鑰路徑]