openSSH的默認設置是允許root可以直接login. (PermitRootLoginyes), 暫且保留這種設置,我們先考慮如何用SSH 直接從A到B不需要密碼,假設用用戶root登錄到A,想SSH到B也作爲root不需要密碼。
- 分別從A和B上登錄作爲root後運行ssh-keygen,目的是簡單地在/root下創建目錄.ssh,當提示輸入
passphase時打入兩次回車。這將生成/root/.ssh/identity and/root/.ssh/identity.pub - 先測試 一下,從A登錄作爲root,打入#ssh B,會要求提示root password。
- 現在從A登錄作爲root,運行scp /root/.ssh/identity.pubB:/root/.ssh/authorized_keys。
文件名必須不能弄錯。 - 現在再從A運行#ssh B則不需要密碼了:)
基本原理:
如果你希望從A作爲用戶user1 SSH 到B作爲用戶user2,若要用RSA鍵對法認證且不需要密碼,則B上的ssh後臺程序拿出~user2/.ssh/authorized_keys中的 與A有關的RSA公鑰來對A上的以user1身份運行的ssh客戶程序進行挑戰,前面我們已經把A上的identity.pub拷貝到B上作爲 authorized_keys了。則A保持私鑰identity,而B上的sshd又拿出A的公鑰來挑戰,因此成功,你可以加很多行到 authorized_keys以允許其它服務器的公鑰可以加進來。
實際應用舉例:
使用SSH命令連接一臺服務器,默認情況下會提示我們輸入密碼:
willis:~ # ssh 192.168.4.249
Password:
創建密鑰:
willis:~ # ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
ae:1e:a6:49:b9:51:1e:27:bc:a6:7d:dd:bb:6b:1a:55root@willis
willis:~ #
注意:輸入上面的ssh-keygen命令後,不用輸入任何信息,直接按回來就可以了,其中參數-t rsa是加密的類型,創建後的密鑰在用戶主目錄中的隱藏目錄.ssh中,
willis:~/.ssh # ls
authorized_keys id_rsa id_rsa.pub known_hosts
willis:~/.ssh #
id_rsa.pub是公鑰,id_rsa是私鑰,known_hosts保存着所有已發生連接服務器的信息,需要將公鑰裏的信息拷貝到登陸服務器用戶主目錄中的隱藏目錄.ssh的文件authorized_keys中,
先看看*.pub文件的內容:
willis:~/.ssh # cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAz61yRO3qGkjNPFpYd9nW4O5F1byghbrCXlxMtB3IKDVHxX9ojybRzZcDDl6KN8w0hq08vWpgjlC
GkYcU75BXCk7zA/5jABejIUOMzgzC+A9b0eNm9ebTInXmfWlYf3P+axDgUlJ84MTAxa68l+Q/6uYc3KbVSsttB6/F37DRZGlTdSyKn
19BimZtZ/M7lyMtqJpYovypxkesbkJjW85sIr2lZeuxqRZWz1ixBwMQyljUvwbHvCS91mzjS76ngKchOCyt9XbwHuL/cXHKMOHgcb
uDqZS8kZFycwVkaNc5f+pZuQ/W8X9Iei35yUEa8qI53Z9o/09fBdOJbl7W5eXLyw==root@willis
willis:~/.ssh #
拷貝文件:
willis:~/.ssh # scp id_rsa.pub[email protected]:/root/.ssh/192.168.4.49
Password:
id_rsa.pub 100% 394 0.4KB/s 00:00
willis:~/.ssh #
scp命令和ssh命令都屬於同一個包,前面的s都表示secure,這樣無論在傳輸數據或是遠程連接都是經過加密的,不用擔心數據被直接截獲。拷貝過去之後,先登陸到這臺服務器上。
willis:~/.ssh # ssh 192.168.4.249
Password:
Last login: Sun Jul 8 11:15:18 2007 from 192.168.4.49
Have a lot of fun...
amd64:~ #
amd64:~/.ssh # ls
192.168.4.49 authorized_keys authorized_keys2 id_rsa id_rsa.pub known_hosts
amd64:~/.ssh #
192.168.4.49就是剛纔傳過來的公鑰文件,爲了保證文件的唯一和可管理性,建議用這個文件命名的方式,要不然信任關係建多了就不好管理了,將這個文件的內容複製到authorized_keys文件中:
amd64:~/.ssh # cat 192.168.4.49
ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAQEAz61yRO3qGkjNPFpYd9nW4O5F1byghbrCXlxMtB3IKDVHxX9ojybRzZcDDl6KN8w0hq08vWpgjlCGkYcU75BXCk7zA/5jABejIUOMzgzC+A9b0eNm9ebTInXmfWlYf3P+axDgUlJ84MTAxa68l+Q/6uYc3KbVSsttB6/F37DRZGlTdSyKn19BimZtZ/M7lyMtqJpYovypxkesbkJjW85sIr2lZeuxqRZWz1ixBwMQyljUvwbHvCS91mzjS76ngKchOCyt9XbwHuL/cXHKMOHgcbuDqZS8kZFycwVkaNc5f+pZuQ/W8X9Iei35yUEa8qI53Z9o/09fBdOJbl7W5eXLyw==root@willis
amd64:~/.ssh # cat 192.168.4.49 >> authorized_keys
注意:要用“>>”這個符號,該符號表示追加,不會將以前的內容刪掉,默認情況下,authorized_keys這個文件是不存在的,需要手動來創建,因爲比較長不太好記憶,可以通過這個方法來查找:
amd64:~/.ssh # man ssh-keygen
顯示幫助信息後,搜索"auth"這個關鍵字就可以了,下面就讓我們重新登陸測試一下,先退出當前登陸的主機環境:
amd64:~/.ssh # exit
重新SSH連接:
willis:~/.ssh # ssh 192.168.4.249
Last login: Sun Jul 8 11:26:41 2007 from 192.168.4.49
Have a lot of fun...
amd64:~ #
如果配置和文件名的拼寫都正確,那麼將不會再提示輸入密碼的信息,根據我的經驗,大多數配置失敗都是因爲 authorized_keys的文件命令有誤,所以要多多注意。好了!配置到這裏,SSH的信任關係就成功了,雖然很簡單,但有很多概念性的東西需要我 們掌握,如果想進一步瞭解,可以看看相關的幫助文檔,還有/etc/ssh目錄中的SSH配置文件