Public Key認證的主要魅力在於認證時承諾沒必要提供密碼就可以同遠程系統創建鏈接。 Public Key認證的基礎在於一對密鑰,public key和private key,public key對數據進行加密並且只能用於加密,private key 只能對所匹配的public key加密過的數據進行解密。 咱們把public key放在遠程系統合適的位置,而後從本地開始進行ssh鏈接。 此時,遠程的sshd會產生一個隨機數並用咱們產生的public key進行加密後發給本地,本地會用private key進行解密並把這個隨機數發回給遠程系統。 最後,遠程系統的sshd會得出結論咱們擁有匹配的private key容許咱們登陸。 --------------------- 做者:Jinsx2015 來源:CSDN 原文:https://blog.csdn.net/axing2015/article/details/83754785 版權聲明:本文爲博主原創文章,轉載請附上博文連接!
1、serverA 免密登陸 serverB 原理
首先在 serverA 上生成一對祕鑰(ssh-keygen)
將公鑰拷貝到 serverB,重命名 authorized_keys
serverA 向 serverB 發送一個鏈接請求,信息包括用戶名、ip
serverB 接到請求,會從 authorized_keys 中查找,是否有相同的用戶名、ip,若是有 serverB 會隨機生成一個字符串
而後使用使用公鑰進行加密,再發送個 serverA
serverA 接到 serverB 發來的信息後,會使用私鑰進行解密,而後將解密後的字符串發送給 serverB
serverB 接到 serverA 發來的信息後,會給先前生成的字符串進行比對,若是一直,則容許免密登陸
2、Centos7 默認安裝了 ssh服務
3、啓動 ssh 服務linux
# 查看 ssh 狀態 systemctl status sshd # 啓動 ssh systemctl start sshd # 中止 ssh systemctl stop sshd
CentOS7 默認使用RSA加密算法生成密鑰對,保存在~/.ssh目錄下的id_rsa(私鑰)和id_rsa.pub(公鑰)。也能夠使用「-t DSA」參數指定爲DSA算法,對應文件爲id_dsa和id_dsa.pub,
密鑰對生成過程會提示輸入私鑰加密密碼,能夠直接回車不使用密碼保護。
1 [root@localhost ~]# ssh-keygen 2 Generating public/private rsa key pair. 3 Enter file in which to save the key (/root/.ssh/id_rsa): 4 Enter passphrase (empty for no passphrase): 5 Enter same passphrase again: 6 Your identification has been saved in /root/.ssh/id_rsa. 7 Your public key has been saved in /root/.ssh/id_rsa.pub. 8 The key fingerprint is: 9 SHA256:/gGrlDJN5euMS5aai5feBkEI/0WjEnzPzx1xGtdkKG4 root@localhost.localdomain 10 The key's randomart image is: 11 +---[RSA 2048]----+ 12 |.o.. o +o | 13 | .o.oo . + +.. | 14 | oo.o. .. B | 15 | o..oo E | 16 | ...oSo . | 17 | .o +o+. | 18 | ooB + . | 19 | .oX.= . . | 20 | .o=o=.o . | 21 +----[SHA256]-----+ 22 [root@localhost ~]# ls ~/.ssh/ 23 id_rsa id_rsa.pub known_hosts 24 [root@localhost ~]#
若是在上面生成祕鑰後,執行 cd ~/.ssh 找不到 .ssh 目錄,是由於沒有使用 ssh 登陸過,使用 ssh 登陸一下便可生成 .ssh 目錄,以後再從新執行 ssh-keygen 生成祕鑰便可
1 [root@localhost ~]# ssh localhost 2 The authenticity of host 'localhost (::1)' can't be established. 3 ECDSA key fingerprint is SHA256:DYd7538oOsqpIIDTs01C3G4S6PRE7msA91yUgk9Dzxk. 4 ECDSA key fingerprint is MD5:88:80:21:03:b2:52:6b:06:ff:c7:3b:d5:2d:47:c9:ad. 5 Are you sure you want to continue connecting (yes/no)? yes 6 Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts. 7 root@localhost's password: 8 Last login: Fri Oct 26 16:15:57 2018 from localhost 9 [root@localhost ~]# ls ~/.ssh/ 10 known_hosts 11 [root@localhost ~]# exit 12 登出 13 Connection to localhost closed. 14 [root@localhost ~]#
1 # 將 serverA ~/.ssh目錄中的 id_rsa.pub 這個文件拷貝到你要登陸的 serverB 的~/.ssh目錄中 2 scp ~/.ssh/id_rsa.pub 192.168.0.101:~/.ssh/ 3 # 而後在 serverB 運行如下命令來將公鑰導入到~/.ssh/authorized_keys這個文件中 4 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 5 6 # 另外要注意請務必要將服務器上 7 ~/.ssh權限設置爲700 8 ~/.ssh/authorized_keys的權限設置爲600 9 # 這是linux的安全要求,若是權限不對,自動登陸將不會生效
ssh 192.168.101