原理
密碼的方式的即時認證的方式 。而公私鑰 是在服務器保存一份已經通過認證的加密串,登錄時通過這個加密串去認證。
公鑰是可以傳播的,私鑰只能在自己的本地
公私鑰的工作原理, 可以參考這篇文章: SSH公鑰登錄(私鑰認證)原理
生成 公私鑰
有機器A,B。現想A通過ssh免密碼登錄到B。
ls -al ~/.ssh
檢測 A主機下是否已經生成過 SSh key , 如果存在 id_rsa
和 id_rsa.pub
的話,說明已經生成過 SSH key 了。可以直接下一步。 否則要先生成。
使用 ssh-keygen
命令 , your-email@example.com
替換為你的郵箱。
> ssh-keygen -t rsa -C "your_email@example.com"
Generating public/private rsa key pair.
命令行會提示讓你指定秘鑰的名稱,按回車鍵將 SSH Key 保存到默認文件名即可:
Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
如果要更改路徑,這里要輸入絕對路徑,不然就出現在根目錄
/
下了。(一般不要修改,默認路徑最好)
接下來會詢問你為 SSH Key 設置密碼,按回車鍵即可,默認為空密碼:
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
不輸入,直接回車就是空密碼了
這一步的密碼一定要注意 。 設置為空密碼,才能免密碼登錄, 否則就是要密鑰的密碼了。 有較多新手朋友爛在了這一步 。明明設置了密鑰,卻還是要輸入密碼。就是這個原因了。
可以都選擇默認,一路 Enter 鍵即可.
這個時候如果我們再使用:
> ls -al ~/.ssh
id_rsa id_rsa.pub known_hosts
SSH 秘鑰的兩個文件:
id_rsa —— SSH 秘鑰的 私鑰 (Private Key)
id_rsa.pub —— SSH 秘鑰的 公鑰 (Public Key)
B 主機設置公鑰
把A機下的/root/.ssh/id_rsa.pub 復制到B機的 /root/.ssh/authorized_keys文件里,先要在B機上創建好 /root/.ssh 這個目錄。
兩種方式:
一:
ssh-copy-id root@192.168.1.181
二:用scp復制。
[root@A ~]# scp /root/.ssh/id_rsa.pub root@192.168.1.181:/root/.ssh/authorized_keys
root@192.168.1.181's password:
id_rsa.pub 100% 223 0.2KB/s 00:00
由於還沒有免密碼登錄的,所以要輸入一次B機的root密碼。
需要特別注意的是:B主機的.ssh文件的所有者要是root,如果不是要改:
chown -R root:root .ssh
同時,B主機的authorized_keys文件,要是600權限的,如果不是,也要改:
chmod 600 authorized_keys
A主機使用公鑰免密登錄B主機的root用戶
[root@A ~]# ssh -l root 192.168.1.181
第一次登錄是時要你輸入yes。
現在A機可以無密碼登錄B機了。
小結:登錄的機子可有私鑰,被登錄的機子要有登錄機子的公鑰。這個公鑰/私鑰對一般在私鑰宿主機產生。上面是用rsa算法的公鑰/私鑰對,當然也可以用dsa(對應的文件是id_dsa,id_dsa.pub)
想讓A,B機無密碼互登錄,那B機以上面同樣的方式配置即可。
參考文章: https://blog.csdn.net/qq_31016531/article/details/78850162