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 HOME/.ssh/knowhosts文件中catHOME/.ssh/knowhosts文件中catHOME/.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文件中,还要修改 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