SSH免密登陆
什么是ssh
ssh
:一种协议标准,与其他协议telnet,ftp等,ssh的优势在于安全远程登陆登陆(约定)
openssh
:是ssh远程安全登陆的开源实现(软件)
ssh远程安全登录的工作原理(基于口令)
- 1.客户端发起远程登录请求
- 2.服务端接收请求,将自己的主机公钥发送给客户端
注:公钥(加密) - 3.客户端将主机发送过来的公钥进行hash算法,得出主机公钥的公钥指纹,核对公钥指纹是否真确,以确认当前连接的主机是否是我们要登录的主机
在hadoop02上查看公钥指纹 ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
hadoop01上验证公钥指纹 - 4.核对过公钥指纹后,输入yes,客户端会将服务端的公钥保存在 HOME/.ssh/knowhosts文件中cat H O M E / . s s h / k n o w h o s t s 文 件 中 c a t HOME/.ssh/know_hosts 查看保存在客户端的公钥
- 5.客户端将密码用服务端的公钥进行加密发送给服务端
- 6.服务端接收加密后的密码,用存在/etc/ssh下的对应的私钥进行解密,然后对比密码,返回登录结果
注:私钥(解密)
ssh免密码登录(基于秘钥的)
注:免密登录不是万能的。免密登录指的是从一台主机A的用户Auser,使用Buser用户(主机B的一个用户)免密码登录到主机B。
只能以hadoop01上的用户root 使用root(hadoop02的)用户登录到hadoop02
root@hadoop01=====>root@hadoop02
存在严格的对应关系
- 1.在客户端上生成一对秘钥(公钥和私钥)
ssh-keygen -t rsa -P “” -f ~/.ssh/id_rsa
注: -t 加密算法 -P 私钥是否使用密码 -f 指定生成秘钥对的保存位置 - 2.将客户端公钥发送给服务端
ssh-copy-id root@hadoop02 hadoop01上的root用户的公钥拷贝给hadoop02的root用户的家目录下
注:要把公钥追加到服务端对应用户的 HOME/.ssh/authorizedkeys文件中,还要修改 H O M E / . s s h / a u t h o r i z e d k e y s 文 件 中 , 还 要 修 改 HOME/.ssh/authorized_keys文件权限 - 3.客户端请求登录服务端(带着自己的用户名和主机名)
- 4.服务端根据客户端的用户名和主机名查找对应的公钥,将一个随机字符串用该公钥加密后发送给客户端
- 5.客户端用自己的私钥将加密字符串解密,再将解密的字符串发送给服务端
- 6.服务端比对发送出去的字符串和接收的字符串是否相同,返回登录结果
使用openssh
这个软件实现hadoop01免密登陆hadoop02
1、hadoop01下载openssh
#查看ssh软件列表
yum list | grep ssh
#下载openssh-clients.x86_64
yum -y install openssh-clients.x86_64
2、hadoop01登陆hadoop02
只是登陆,没有免密,所以需要输入yes进行确定,并且要输入密码
[root@hadoop01 ~]# ssh hadoop02
The authenticity of host 'hadoop02 (192.168.138.102)' can't be established.
RSA key fingerprint is 4c:60:83:45:4a:98:d5:f5:5b:b0:31:42:1a:44:d9:6d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop01,192.168.138.102' (RSA) to the list of known hosts.
root@hadoop01's password:
Last login: Sat Sep 8 10:20:04 2018 from 192.168.138.1
[root@hadoop02 ~]#
3、hadoop01生产密钥,并发送给hadoop02
#基于公钥进行免密登陆
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id root@hadoop02
4、查看是否成功
[root@hadoop01 ~]# ssh hadoop02
Last login: Sat Sep 8 10:35:55 2018 from 192.168.138.1
[root@hadoop02 ~]#
远程拷贝命令scp(基于ssh的远程安全登录的)
所有机器上安装openssh客户端
1.远程拷贝文件
#scp 本机文件 user@host:路径/ #注:将hdp01上的/etc/profile文件拷贝到hdp02的根目录下 scp /etc/profile root@hdp02:/ #注:将hdp01上的/etc/profile文件拷贝到hdp02的根目录下,并改名为profile.txt scp /etc/profile root@hdp02:/profile.txt
2.远程拷贝目录
#scp -r 本机目录 user@host:路径/ #注:将hdp01上的/bin文件拷贝到hdp02的根目录下 scp -r /bin root@hdp02:/home/ #注:将hdp01上的/bin文件拷贝到hdp02的根目录下,并改名为bin.bak scp -r /bin root@hdp02:/home/bin.bak
3.下载文件到本地
#scp user@host:文件名 本地目录 #注:将hdp02上的/profile下载到本地并改名为profile.txt scp root@hdp02:/profile ./profile.txt
4.下载目录到本地
#scp -r user@host:文件名 本地目录 #注:将hdp02上的/bin下载到本地并改名为bin.bak scp -r root@hdp02:/home/bin ./bin.bak