SSH系列文章 : "SSH基礎:SSH和SSH服務" "SSH轉發代理:ssh agent用法詳解" "SSH隧道:埠轉發功能詳解" 使用ssh agent之前 使用ssh公鑰認證的方式可以免去ssh客戶端(如ssh命令、xshell等)連接遠端主機sshd時需要輸入對方用戶密碼的問題。 但如果 ...
SSH系列文章:
SSH基礎:SSH和SSH服務
SSH轉發代理:ssh-agent用法詳解
SSH隧道:埠轉發功能詳解
使用ssh-agent之前
使用ssh公鑰認證的方式可以免去ssh客戶端(如ssh命令、xshell等)連接遠端主機sshd時需要輸入對方用戶密碼的問題。
但如果執行ssh命令所在的主機上保存了多套秘鑰且將各公鑰分發給了不同的遠端主機,這時即使使用了公鑰認證,也依然需要輸入密碼,因為ssh客戶端不知道要讀取哪個私鑰去和該遠端主機上的公鑰配對。
看下麵這張圖描述的情況:
上面描述的情形是這樣的:ssh客戶端要管理web server群,還要管理mysql server群,ssh客戶端要為這兩個群內的主機使用不同的密鑰對。例如要連接web server群內的主機,使用~/.ssh/id_rsa_1
這一套秘鑰,連接mysql server群內的主機,使用~/.ssh/id_rsa_2
這一套秘鑰。
於是,將id_rsa_1.pub
分發給web server群內的每個主機,將id_rsa_2.pub
分發給mysql server群內的每個主機:
$ ssh-copy-id -i ~/.ssh/id_rsa_1.pub root@webserver1
$ ssh-copy-id -i ~/.ssh/id_rsa_1.pub root@webserver2
$ ssh-copy-id -i ~/.ssh/id_rsa_1.pub root@webserver3
$ ssh-copy-id -i ~/.ssh/id_rsa_2.pub root@mysqlserver1
$ ssh-copy-id -i ~/.ssh/id_rsa_2.pub root@mysqlserver2
$ ssh-copy-id -i ~/.ssh/id_rsa_2.pub root@mysqlserver3
這一切進行的都很歡樂,但是一連接,發現還是要密碼:
$ ssh root@webserver1
快輸入 root@webserver's 密碼:???
$ ssh root@mysqlserver1
快輸入 root@mysqlserver's 密碼:???
這是因為ssh客戶端連接webserver1的時候,除了預設會讀取的規範私鑰文件id_rsa
(或其它秘鑰類型)外,不會自動讀取任何一個文件,同理連接mysqlserver1也一樣。
正確的連接方式是指定連接時使用哪個私鑰去配對:
$ ssh -i ~/.ssh/id_rsa_1 root@webserver1
$ ssh -i ~/.ssh/id_rsa_2 root@mysqlserver1
好歡樂,終於連上了。但是真噁心,還要指定連接私鑰。
不僅如此,如果私鑰是加密(passphrase)的,指定私鑰的時候還得輸入這個passphrase密碼。