實現ssh的無password登錄
這裏所說的ssh是指OpenSSH SSHclient。是用於登錄遠程主機。而且在遠程主機上運行命令。它的目的是替換rlogin和rsh,同一時候在不安全的網絡之上,兩個互不信任的主機之間,提供加密的、安全的通信連接。X11連接和隨意TCP/IPport均能夠通過此安全通道轉發。
在RedHat 6.1中,默認安裝的OpenSSL是一種比較常見的SSH服務端和client軟件。默認port是22。
SSH服務端事實上是一個守護進程(daemon),在後臺執行並對應來自client的連接請求。服務端通常是sshd進程,提供了對遠程連接的處理。一般包含公共密鑰認證、密鑰交換、對稱密鑰加密和非安全連接等。
SSHclient程序包含ssh程序。及scp(遠程拷貝)、slogin(遠程登錄)、sftp(安全文件傳輸)等其它的應用程序。
在有些情況下,須要實現ssh的無password登錄。或者稱為免password登錄。
比方:Hadoop的偽分布式模式部署、全然分布式模式部署。
配置
有兩臺主機:主機A:192.168.1.132,主機B:192.168.1.133,須要配置主機A無password登錄主機A、主機B。
生成私鑰、公鑰
在主機A上:
$ cd ~/.ssh(假設沒有改目錄。直接創建一個) $ ssh-keygen -t rsa
上面的ssh-keygen命令中。參數-t是生成密鑰的方式,有三種方式:協議版本號1的rsa1、協議版本號2的rsa和dsa。
通常選rsa或dsa。既安全。又省事。
這個時候會打印一些運行結果及交互操作。一路回車就可以。
Generating public/private rsa key pair. Enter file in which to save the key (/home/lxh/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/lxh/.ssh/id_rsa. Your public key has been saved in /home/lxh/.ssh/id_rsa.pub. The key fingerprint is: 2e:34:7c:3a:be:e4:3b:93:2f:1d:32:4f:2d:fe:13:a1 [email protected]
生成存放RSA/DSA的公鑰
直接復制生成的id_rsa.pub文件就可以。
$ cp id_rsa.pub authorized_keys $ chmod 600 authorized_keys
按理說此時就能夠無password登錄本機了,即通過命令:
$ ssh localhost
第一次須要輸入一個yes,由於須要在第一次登錄該主機時記錄實用戶登錄。之後就不會出現了。
復制公鑰
然後將公鑰文件authorized_keys復制到主機B的同樣位置上。
$ scp authorized_keys 192.168.1.133:~/.ssh
由於已經在主機A上改動過authorized_keys的權限,一般主機B上也是600格式。假設不是。就改動主機B上的authorized_keys文件權限為600。
$ chmod 600 authorized_keys
普通情況下,能夠通過主機A無password登錄主機A和主機B了。
FQA
登錄時出現“Agent admitted failure to sign using the key.”
在~/.ssh文件夾中運行
$ ssh-add
出現以下的信息,就成了:
Identity added: /home/lxh/.ssh/id_rsa (/home/lxh/.ssh/id_rsa)
假設提示以下的信息:
Could not open a connection to your authenticationh agent
就運行:
ssh-agent bash
沒有錯誤信息。但須要輸入password登錄
須要查看一下.ssh文件夾和authorizedkeys文件的權限,須要.ssh文件夾的權限為700,authorizedkeys文件的權限為600。假設主機A連接主機B,就在主機B上運行:
$chmod 700 ~/.ssh $chmod 600 ~/.ssh/authorized_keys
ssh代理未開啟
通過命令查看ssh代理是否開啟
$ ps -ef|grep ssh-agent
假設開啟了,直接kill掉,然後啟動ssh代理。
$ ssh-agent
假設還是不行。就重新啟動ssh服務:
# service sshd restart(須要root權限)
實現ssh的無password登錄