嵌入式 SSH无密码验证登录的实现

2019-07-12 15:53发布

1. 前期准备:  检查是否安装了SSH服务和rsync服务(rsync是一个远程数据同步工具,可以通过LAN/WLAN快速同步多台主机之间的文件)  rpm -qa | grep openssh   rpm -qa | grep rsync  我的Centos 5.6下的显示:   如果没有安装则执行一下安装: yum install ssh  yum install rsync  service sshd restart 启动服务

1. SSH无密码验证的原理  Master作为客户端,要实现无密码公钥认证,连接到服务器Slave上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH链接到Slave上时,Slave会生成一个随机数并用Master的公钥对随机数进行加密,并发送给MasterMaster收到加密数之后再用私钥解密,并将解密数回传给SlaveSlave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,期间不需要手工输入密码,重要的过程是将Master上产生的公钥复制到Slave上。
 
2. 实际操作过程  3.1 Master实现无密码登录Slave  1> 以root用户登录,更改SSH的配置文件  vim/etc/ssh/sshd_config     RSAAuthentication yes # 启用 RSA 认证  PubkeyAuthentication yes # 启用公钥私钥配对认证方式  AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径  重启SSH服务: service sshd restart 
 
 2> 以新建用户hadoop身份登录  su - hadoop   ssh-keygen -t rsa 生成密钥文件,一切按默认的方式生成(直接回车就可以,不需要输入任何东西!!!),密钥文件生成后默认存放位置为/home/hadoop(你的用户名)/.ssh     查看生成文件: ll .ssh 下面的这两个即为生成的密钥对     将id_rsa.pub加到授权的key里面去:cat id_rsa.pub >> authorized_keys     修改authorized_keys的权限,(这一步很重要不然的话,SSH时仍然需要密码)  chmod 600 authorized_keys      查看本机是否可以SSH无需密码登录: ssh localhost      OK , 以上证明本机登录成功。    接下来要做的就是将Master的公钥id_rsa.pub复制到Slave上去,并加入到授权的key中。  scp ~/.ssh/id_rsa.pub hadoop@192.168.171.133:~/或者  ssh-copy-id -i  userA@nodeA 
 就会自动把B上的文件:~/.ssh/id_rsa.pub 文件拷贝到nodeA的~/.ssh/下,并且命名为authorized_keys.
    由于首次登录还没有添加认证,这次仍然会提示输入密码   以hadoop身份登录Salve节点(注意此前意见以root身份对ssh的配置进行修改,方式同上)     确认文件存在   如果不存在.ssh 则创建文件夹.ssh,并将权限修改为700,这一步非常重要因为默认创建的.ssh文件夹的权限为700,手工创建不修改权限的话不能成功,修改权限后将该    id_rsa.pub添加到授权的key中:   mkdir .ssh    chmod 700 .ssh    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys    修改authorized_keys的权限为600   chmod 600 ~/.ssh/authorized_keys    进入Master节点,检查能否登录Slave节点:   ssh 192.168.171.133     OK , 在Master上无密码登录Slave成功 3.1.2 同样在Slave上生成密钥对,并添加到Master授权中,就可以实现相互无密码登录了。  ssh-keygen -t rsa   cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys   scp ~/.ssh/id_rsa.pub hadoop@192.168.171.131:~/  cat ~/id_rsa.pub >> ~/.ssh/authorized_keys  验证登录即可。  注意几点:     1> SSH的配置文件一定要修改,而且修改后要重启   2> 认证文件一定要采用追加方式:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys   3> authorized_keys文件的权限一定要修改为600   4> .ssh的文件如果是手动创建的话权限一定要修改为700 

完美Demo示例: ssh 无密码登陆
一、公钥和私钥
在构建无密码登陆之前说明:ssh的密码是加密的,分为公钥和私钥
公钥是给别人的,私钥是自己留着的 
公钥加密的东西,用私钥解 
私钥加密的东西,用公钥解  

如果B想无密码登陆到A。

B 产生自己本机的公钥和私鈅,并且把公钥给A,当B登陆到A时,B上的私鈅会解读A上面的公钥。

二、B产生公、私鈅
在B上运行如下的命令:
$ ssh-keygen -t rsa     #### -t 表示加密的方式  rsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): 
Enter passphrase (empty for no passphrase): (直接回车)
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
82:0c:91:f4:61:d0:03:52:e0:86:6a:66:77:f7:d0:40 userB@nodeB

2、在B的主目录下:.ssh/产生2个文件id_rsa id_rsa.pub 其中:id_rsa.pub就是公钥。

3、在B上运行如下的命令
$ ssh-copy-id -i  userA@nodeA 
就会自动把B上的文件:~/.ssh/id_rsa.pub 文件拷贝到nodeA的~/.ssh/下,并且命名为authorized_keys. ***

4、在A上运行如下的命令
$cd /root/.ssh/
$cat id_rsa.pub >>authorized_keys


这样B即可利用自己的公钥来访问A,实现无密码登陆到A。