linux的ssh配置实现无密码登录

bruce 2015-08-07

实现原理:
使用一种被称为"公私钥"认证的方式来进行ssh登录. "公私钥"认证方式简单的解释是
首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa)
然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥
当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了

配置过程:

(首先配置/etc/hosts文件,ip以我的两台虚拟机为例,添加192.168.56.101  node0,192.168.56.102 node1)

(假设已经配置好/etc/hosts文件,现在node0代表master,node1代表slave,其它slave同理,暂时先以这两个做示范,用户名均是hadoop,你要先搞清楚状况,现在master相当于上述原理中的客户端,slave相当于服务器,即现在是master(node0)想要登录到slave(node1)上)

1、安装:sudo apt-get install ssh 
这个安装完后,可以直接使用ssh命令 了。
执行$ netstat  -nat    查看22端口是否开启了。

 测试:ssh localhost。

 输入当前用户的密码,回车就ok了。说明安装成功,同时ssh登录需要密码。
(这种默认安装方式完后,默认配置文件是在/etc/ssh/目录下。sshd配置文件是:/etc/ssh/sshd_config): 
注意:在所有机子都需要安装ssh。

2、在node0上执行 ssh-keygen   -t   rsa
(注:每次执行 ssh-keygen -t rsa 产生的私钥文件都会不同)
a)如果文件"~/.ssh/id_rsa"存在,会提示是否覆盖该文件,此时可选择"n"不覆盖该文件而使用已有的id_rsa文件;如果选择"y"则会重新生成"~/.ssh/id_rsa"文件,接下来会提示输入passphrase,回车确定使用空的passphrase,再次回车确认(这里也可以输出passphrase,相当于ssh时登录的密码)。然后会重新生成"~/.ssh/id_rsa"文件和"~/.ssh/id_rsa.pub"文件。

b)如果"~/.ssh/id_rsa"文件和"~/.ssh/id_rsa.pub"文件不存在则会自动创建新的"~/.ssh/id_rsa"文件和"~/.ssh/id_rsa.pub"文件,passphrase设置同上。

(注:第一次安装,当然是第二种情况咯!)

3、现在要做的就是把公钥放到node1上了

a)如果node1上已经存在"~/.ssh/authorized_keys"文件,那么需要使用ssh hadoop@node1登录到服务器,编辑服务器上"~/.ssh/authorized_keys"文件,将客户端机器上的"~/.ssh/id_rsa.pub"文件内容追加到"~/.ssh/authorized_keys"文件中。
(注:可以在客户端机器上使用以下命令来实现: cat  ~/.ssh/id_rsa.pub | ssh hadoop@node1 "cat - >> ~/.ssh/authorized_keys")
(此时会要求输入hadoop在服务器上的登录密码,输入后即会将客户端机器上的"~/.ssh/id_rsa.pub"文件内容追加到服务器上的"~/.ssh/authorized_keys"文件中)

b)如果服务器上没有"~/.ssh/authorized_keys"文件,那么首先在客户端上执行 cp   id_rsa.pub   authorized_keys (即将公钥复制为authorized_keys文件,准备再将此文件直接复制到服务器上),然后在服务器上建立目录~/.ssh/,最后将authorized_keys从客户端复制到服务器,在node0执行下面这条命令

scp authorized_keys   node1:/home/hadoop/.ssh/

会提示你是否连接,输入yes,然后会提示你输入hadoop@node1‘s password,输入密码。

(注:第一次安装,也是第二种情况!)

4、ok,完成咯!下面登录,在node0上执行 

ssh node1

会直接登入到node1哦!不用输入密码啦!退出的话就 exit 

呃,相信你懂了原理以后,之间出的小状况你也一定可以解决的,祝你成功啦~

(另外,下面是有密码登录的情况,我自己做下笔记,你可以无视,呵呵~)

如果设置了passphrase,则此时需要输入该passphrase登录服务器。此时前面我们把输入密码变成了输入passphrase,这没有带来任何方便。但是我们可以通过ssh-agent来帮助我们自动输入passphrase(只是看起来像是自动输入而已),我们只要在第一次登录时输入一次passphrase, 以后的工作就可以交给ssh-agent。在客户端机器上执行命令ssh-add,这里会提示输入一次passphrase。输入第一步中设置的passphrase之后会修改"~/.ssh/id_rsa"文件。再在客户端执行"ssh hadoop@node1"即可无密码登录到服务器端。

原文地址:http://blog.csdn.net/yxc135/article/details/8462506

相关推荐