1. 程式人生 > >實現ssh的無password登錄

實現ssh的無password登錄

p s restart 互操作 分布 sftp 三種方式 keys hcl popu

這裏所說的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]
/* */ The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | . . | | + So . | | .o=E o | | =O.o . | | +=o+ . | | =B.... | +-----------------+

生成存放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登錄