ssh現在是連接我家裡電腦和公司電腦的橋梁了,經常在偷懶的時候ssh上去干活,這樣我就不用大老遠跑到公司去了,另外我的郵件——mutt和feeds——liferea以及一些其他東東也都使用unison來和公司的電腦進行同步,這樣一天到晚ssh,密碼又長,甚煩,還擔心電影裡的黑客拿膠布往鍵盤上一粘就知道磨得最亮的那幾個鍵就是我的密碼,所以下決心搞定公鑰/私鑰的方式自動登錄,免去密碼輸入之苦。
第一步,生成鑰匙對
$ ssh-keygen -d
Generating public/private dsa key pair.
Enter file in which to save the key (/home/fwolf/.ssh/id_dsa): .ssh/fwolf_dsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
open .ssh/fwolf_dsa failed: No such file or directory.
Saving the key failed: .ssh/fwolf_dsa.
這裡我使用的是dsa格式的密鑰,也可以使用-t rsa參數指定rsa格式,我實在不知道他們有啥差別;不帶參數大概是針對ssh1的密鑰格式,現在應該很少人用ssh1了。提示輸入 passphrase(其實相當於私鑰的密碼)的時候,回車表示不設密碼,在這裡我設置了非空的密碼。
第二步,把公鑰上傳到服務器上去
$ ssh-copy-id -i ~/.ssh/fwolf_dsa.pub fwolf.com
30
[email protected]'s password:
Now try logging into the machine, with "ssh 'fwolf.com'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
一個命令搞定,當然此時我們仍然需要服務器ssh的密碼,才能把pub key傳上去,ssh-copy-id命令會直接把key添加到.ssh/authorized_keys文件中,這和下面的做法效果是一樣的:
$ scp ~/.ssh/fwolf_dsa.pub [email protected]
...
$ ssh [email protected]
...
$ cat fwolf_dsa.pub >> ~/ssh/authorized_keys
第三步,我們來享受一下自動登錄的樂趣吧
$ ssh fwolf.com。。。疑,怎麼還需要輸入密碼呢?如果你遇到和我一樣的問題,並且pub key上傳也沒有問題的話,說明是ssh客戶端配置沒有搞定,注意第一步中我更改了key文件的默認名稱不是麼?所以把/etc/ssh /ssh_config文件拷貝一份存為~/.ssh/config,然後編輯之,更改其中IdentityFile ~/.ssh/id_dsa這一行,去掉注釋,添上你實際的dsa私鑰文件名就可以了,然後再次ssh:
$ ssh fwolf.com
Enter passphrase for key '/home/fwolf/.ssh/fwolf_dsa':
......(登錄成功)
第四步,去掉那該死的passphrase
在上面的第三步中,ssh雖然無須再輸入用戶密碼,但仍然要輸入私鑰的passphrase,這和輸入ssh密碼一樣麻煩,幸好托ibm的福,大牛Daniel Robbins為我們介紹了使用ssh-agent和keychain免去輸入密碼之煩的方法,不過應該不適用於我們這樣經常需要開關機的情況,所以,只好回到第一步,生成一對沒有passphrase的密鑰來用,雖然安全性下降了些,倒是非常方便。
安全建議
如果條件允許,使用帶有passphrase的密鑰,配合ssh-agent和keychain使用。
如果需要從不同的計算機登錄服務器,最好使用不一樣的密鑰對。
記得定期更換密鑰對,切記