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_rsa
及 id_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
自動化執行
放在 .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
4Host [名稱]
HostName [主機名]
User [使用者登入ID]
IdentityFile [私鑰路徑]