2007年12月11日

遠端登入免密碼 — OpenSSH公鑰交換技術

  一般來說,密碼是登入 Linux 主機的必要條件,不管是自己的電腦,還是公司的伺服器,使用密碼登入幾乎是最常見的方式。 但是對於那種必須要常常透過 SSH 登入遠端主機的管理員來說,每打一次 ssh xxx@url 就要 key in 一次密碼可說是超沒效率的事,要是登入遠端主機可以不用密碼,那該有多好呢? 幸好 OpenSSH 的確提供了一個安全且便利的解決方案–公鑰交換技術,顧名思義就是以公鑰代替每次登入主機時都要輸入的密碼,讓整個登入的過程簡化不少喔! :)

  要使用公鑰代替登入密碼,首先我們必須利用 ssh-keygen 建立我們的公鑰和私鑰:
$ ssh-keygen -t rsa

  這裡的 "-t rsa" 指的是使用 RSA Keys ,如果你想用 DSA keys 的話,就改成 "-t dsa" 就可以了,或者若你使用的是 Protocol v1 的話(呃?!)你應該指定成 "-t rsa1"。

  首先 ssh-keygen 會問你要把 keys 放哪,這邊直接Enter過去。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/somebody/.ssh/id_rsa): <這邊直接Enter>


  然後 ssh-keygen 會要求你輸入私鑰的通行碼,通行碼雖然是保護私鑰即使外流也不易被盜用的好方法,但是在這邊因為每一次讀取私鑰都會要求輸入通行碼,因此如果設定通行碼的話就等於和用密碼登入沒兩樣了(只不過是輸入密碼變輸入通行碼而已),在這邊問的通行碼我們就直接案 Enter 跳過。

Enter passphrase (Empty for no passphrase): <enter跳過>
Enter same passphrase again: <再Enter一次>
Your identification has been saved in ...(略)...

  接著公鑰和私鑰就產生完成了,它們會被放在 ~/.ssh 下,其中 id_rsa 是私鑰, id_rsa.pub 是公鑰,請注意保護你的私鑰,千萬不要讓它離開你的電腦,以避免被盜用。接著請你把你的公鑰安置到遠端主機的 ~/.ssh 下:

$ ssh somebody@server "mkdir .ssh; chmod 0700 .ssh"
somebody's password: <輸入遠端登入密碼>
$ scp ~/.ssh/id_rsa.pub \
somebody@server:~/.ssh/authorized_keys

somebody's password: <輸入遠端登入密碼>

  注意複製到遠端主機的公鑰除了必須放在遠端主機的 ~/.ssh 下外,還必須叫作 authorized_keys 才行,如果有很多的 key ,叫作 authorized_keys2、authorized_keys3....也行。 當公鑰順利傳送到遠端主機以後(注意!私鑰不用傳),下一次起登入該主機,應該就不用密碼了!當然,如果你常登入的 SSH 主機很多,你也可以將公鑰一一上傳上去,這樣以後登入主機或利用 ssh 執行遠端指令等等,都不會再需要輸入密碼了。當然,最後再提醒一點,就是私鑰要保存好,千萬不要讓它有離開自己電腦的任何一點機會喔! ;)

沒有留言:

張貼留言

請注意,在較舊的文章留言並不會馬上出現在回應區!

Site Meter