參考原文出處:http://www.l-penguin.idv.tw/article/ssh-keygen.htm
註:要簡單一點的方式,請參考另一篇 免密碼 ssh 登入遠端主機 的操作。
不用密碼直接用 ssh 登入到遠端電腦
參考文件
多年前 telnet 當道,但在安全意識漸漸浮上檯面之後,telnet 在登入時的安全就被大家質疑,後來 ssh (Secure Shell) 出現時,改變了當初的習慣,大家在管理 Linux 時,現在都使用 ssh 來登入,而 ssh 好處我在這也不再多做說明,因為他還可以配合 rsync 做出遠端備份,一旦設定好 ssh 之後,還會有 scp 可以使用!這樣就可以在不同電腦間 copy 檔案,並且為傳輸的資料加密了!
Shell Script & ssh
自動化的工作可以讓管理員有效率的完成目標,也不用浪費人力和時間做同樣的事情,在無人職守的情況下,要讓 script 自動連入遠端系統做事是件有些麻煩的事,因為您必需登入系統才可以繼續工作,為了不略過登入系統這個步驟,我們可以製做一個 public key 讓遠端的機器信任我們,如此就只要直接連入就可以,而不用再輸入帳號和密碼。
製作 public keys & private keys
利用 ssh-keygen 來做出公用和私有鑰匙,並傳送 public key 到遠端機器使其信任本機登入。
[steven@cute steven]$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/steven/.ssh/id_dsa): Enter passphrase (empty for no passphrase): <- 不用輸入 Enter same passphrase again: <- 不用輸入 Your identification has been saved in /home/steven/.ssh/id_dsa. Your public key has been saved in /home/steven/.ssh/id_dsa.pub. The key fingerprint is: fa:c9:a9:e4:d5:70:52:88:cc:f3:25:fd:68:ae:c4:4b steven@cute.com.tw [steven@cute steven]$ |
接著,再到 /home/steven/.ssh 裡看看,會多出 id_dsa 和 id_dsa.pub 這兩個檔案。
[steven@cute steven]$ cd .ssh [steven@cute .ssh]$ ls id_dsa id_dsa.pub known_hosts [steven@cute .ssh]$ |
現在我們要使遠端機器 mirror.abc.com,使用 sandy 登入時不用輸入密碼,因為,我們應該複製一份 id_dsa.pub 到 sandy@mirror.abc.com 去,並加入到 authorized_keys。
[steven@cute .ssh]$ scp id_dsa.pub sandy@mirror.abc.com:~/id_dsa_steven.pub sandy@mirror.abc.com's password: id_dsa.pub 100% |*****************************| 607 00:00 [steven@cute .ssh]$ |
登入 sandy@mirror.abc.com
[steven@cute .ssh]$ ssh sandy@mirror.abc.com sandy@mirror.abc.com's password: -bash-2.05b$ ls id_dsa_steven.pub id_dsa_steven.pub -bash-2.05b$ cat id_dsa_steven.pub >> .ssh/authorized_keys -bash-2.05b$ exit |
完成後離開,回到本機,再做一次 ssh 到 mirror.abc.com
[steven@cute .ssh]$ ssh sandy@mirror.abc.com -bash-2.05b$ |
如此就不用輸入密碼就直接登入了!
保護你的私有金匙
在製做 dsa key 時,會有一份私有和一份公有金匙,實務上會保留起來,並做備份,因為當 ssh 在登入時,會使用 id_dsa.pub 和本機的 id_dsa 做確認,因此如果這兩者比對不成功時就會再次要求輸入密碼。