0, 原理
這種方式你需要在客戶端伺服器上為自己建立一對密匙,並把公匙放在需要登入的伺服器上。
當你要連線到伺服器上時,客戶端就會向伺服器請求使用密匙進行安全驗證。
伺服器收到請求之後,會在該伺服器上你所請求登入的使用者的家目錄下尋找你的公匙,
然後與你傳送過來的公匙進行比較。
如果兩個密匙一致,伺服器就用該公匙加密「質詢」並把它傳送給客戶端。
客戶端收到「質詢」之後用自己的私匙解密再把它傳送給伺服器。
1, 操作
配置 主機a:192.168.0.101
主機b:192.168.0.102
需要實現:在主機a上實現ssh無密碼連線主機b;
步驟:0, 登入主機a:192.168.0.101
1, ssh-keygren -t rsa
2, cd /root/.ssh/
3, scp ./id_rsa.pub [email protected]:/root/.ssh/id_rsa.pub.101
4, ssh root@[email protected]
5, chmod 700 ./.ssh/ # option
6, cd ./.ssh/
7, cat id_rsa.pub.101 >> authorized_keys
8, chmod 600 authorized_keys # option
2, 使用場景
1) rsync自動備份時免密碼登入;
2) 集群環境中需要主機間互相通訊;
3) 自動部署專案,將編譯好的war包放到正確的伺服器上。
3, faq
1) 如果出現報警:"address x.x.x.x maps to localhost, but this does not map back to the address - possible break-in attempt!"。
在"192.168.0.101"(連線端)伺服器上執行如下命令:
echo "gssapiauthentication no" >> ~/.ssh/config
在"192.168.0.102"(被連線端)伺服器上執行"vi /etc/ssh/sshd_config"命令,修改下面兩項值為"no" :
"gssapiauthentication no"
"usedns no"
2) 如果出現報警:"agent admitted failure to sign using the key."
執行命令:"ssh-add"(把專用金鑰新增到ssh-agent的快取記憶體中)
如果還不行,執行命令:"ps -af | grep agent "
(檢查ssh**是否開啟,如果有開啟的話,kill掉該**)
然後執行"ssh-agent"(重新開啟乙個ssh**)
如果還是不行,繼續執行命令:"sudo service sshd restart"(重啟一下ssh服務)
3) 通過命令"/usr/sbin/sestatus -v" 檢視selinux狀態,如果"selinux status"引數為"enabled"(開啟狀態),則關閉selinux。
臨時關閉方法(不用重啟機器):"setenforce 0"
修改配置檔案關閉方法(需要重啟機器):執行命令"/etc/selinux/config",將"selinux=enforcing"改為"selinux=disabled"
4) 執行命令"vim /etc/ssh/sshd_config"去掉下面三行的注釋:
"rsaauthentication yes"
"pubkeyauthentication yes"
"authorizedkeysfile .ssh/authorized_keys"
ssh 免密碼登入
ssh 無密碼登入要使用公鑰與私鑰。linux下可以用用ssh keygen生成公鑰 私鑰對,下面我以centos為例。有機器a 192.168.1.155 b 192.168.1.181 現想a通過ssh免密碼登入到b。1.在a機下生成公鑰 私鑰對。chenlb a ssh keygen t rs...
ssh 免密碼登入
ssh 免密碼登入 ssh 無密碼登入要使用公鑰與私鑰。linux下可以用用ssh keygen生成公鑰 私鑰對,下面我以centos為例。有機器a 192.168.1.155 b 192.168.1.181 現想a通過ssh免密碼登入到b。1.在a機下生成公鑰 私鑰對。chenlb a ssh k...
ssh免密碼登入
實現原理 主機a 產生公鑰和金鑰,將主機a的公鑰傳送到主機b 主機b 接收主機a傳送的公鑰 主機a ssh請求登入到主機b 主機b 傳送給主機a一串字元 主機a 收到主機b傳送的字元,使用金鑰進行加密,並傳送回到主機b 主機b 接收到主機a使用金鑰加密後的字元,使用主機a的公鑰執行一定演算法進行對比...