第二十五节、SSH远程免密登录

SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH 协议可以有效防止远程管理过程中的信息泄露问题。
从客户端来看,SSH提供两种级别的安全验证:
1、基于口令的验证
只要知道帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但缺点是:不能保证你正在连接的服务器就是你想连接的服务器。连接过程如下


第二十五节、SSH远程免密登录_第1张图片
SSH远程密码登录.png

当第一次链接远程主机时,会提示您当前主机的”公钥指纹”,询问您是否继续,如果选择继续后就可以输入密码进行登录了,当远程的主机接受以后,该台服务器的公钥就会保存到~/.ssh/known_hosts文件中
2、基于密钥的验证
这种验证的前提是客户端需要生成一对密钥,将公钥放到需访问的远程服务器。这种验证比上一种的好处是,不能仿冒真正的服务器,因为要仿冒必须拿到客户端生成的公钥。缺点就是验证等待过程稍长些。


第二十五节、SSH远程免密登录_第2张图片
SSH远程免密登录.png

如何生成密钥:

  • 在客户端打开终端,执行ssh-keygen,该命令会默认在~/.ssh/目录下创建id_rsa、id_rsa.pub两个文件,分别为您的公钥和私钥
  • 将公钥id_rsa.pub文件拷贝到服务器端的~/.ssh/authorized_keys文件中,有三种方法:
  1. 通过scp拷贝,例:scp -P 22 ~/.ssh/id_rsa.pub user@host:~/authorized_keys #可选参数-P代表指定用端口号22
  2. 通过ssh-copyid程序,例:ssh-copy-id -i 绝对路径/file_name 目标主机IP #此种方式简单,不需追加改文件名,但不能指定端口号,默认以22端口而且需要输入密码
  3. 通过cat方法: 例:cat ~/.ssh/id_rsa.pub | ssh -p 22 user@host ‘cat >> ~/.ssh/authorized_keys’
    原理图如下:
    第二十五节、SSH远程免密登录_第3张图片
    SSH远程密码登录原理.png

    图解,server A免登录到server B:
    1.在A上生成公钥私钥。
    2.将公钥拷贝给server B,要重命名成authorized_keys(从英文名就知道含义了)
    3.Server A向Server B发送一个连接请求。
    4.Server B得到Server A的信息后,在authorized_key中查找,如果有相应的用户名和IP,则随机生成一个字符串,并用Server A的公钥加密,发送给Server A。
    5.Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。Server B进行和生成的对比,如果一致,则允许免登录。
    总之:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。
实际操作
#生成密钥对,t参数指定加密方式rsa,回车3次
[root@localhost ~]# ssh-keygen -t rsa 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
eb:38:2d:a0:9e:3d:93:95:a2:52:ec:eb:0b:60:65:44 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|  .E             |
|  .              |
|   o             |
|  o              |
|.o     .S        |
|o o o o  .       |
|.o o = ..        |
|..+o+ oo.        |
| +*o.o.o.        |
+-----------------+
#查看密钥存放的目录
[root@localhost ~]# ll /root/.ssh/
总用量 8
-rw------- 1 root root 1675 12月 19 15:16 id_rsa         # 私钥自留
-rw-r--r-- 1 root root  408 12月 19 15:16 id_rsa.pub   #公钥拷贝给目标主机
#传送公钥给目标主机需要输入密码
[root@localhost ~]# ssh-copy-id  -i /root/.ssh/id_rsa.pub  192.168.15.150
The authenticity of host '192.168.15.150 (192.168.15.150)' can't be established.
RSA key fingerprint is 76:72:55:b7:3f:e1:8b:6d:8d:d7:50:fb:d5:27:bb:c1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.15.150' (RSA) to the list of known hosts.
Now try logging into the machine, with "ssh '192.168.15.150'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.
#SSH免密设置成功,可以直接在本机获取远程主机的参数,ssh -l user_name  IP "command"
[root@localhost ~]# ssh -l root 192.168.15.150 "df -h"
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda5        58G  3.7G   52G   7% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       194M   30M  155M  17% /boot
/dev/sda2        20G  5.7G   14G  31% /data
[root@localhost ~]# ssh -l root 192.168.15.150 "ifconfig"
eth0      Link encap:Ethernet  HWaddr 00:0C:29:BA:80:B0  
          inet addr:192.168.15.150  Bcast:192.168.15.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feba:80b0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:661 errors:0 dropped:0 overruns:0 frame:0
          TX packets:348 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:75506 (73.7 KiB)  TX bytes:54018 (52.7 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:840 (840.0 b)  TX bytes:840 (840.0 b)
服务主配置

服务主配置文件一般保存服务的主要参数,一般路径/etc/soft/soft.conf
普通配置文件一般是由主配置文件调用

[root@localhost ssh]# vim sshd_config
17 #Port 22                      #默认端口号
48 #PermitRootLogin yes  #允许超级管理员登录,取消注释改为no,root用户无法远程登录 
77 #PermitEmptyPasswords no  #允许空密码登录,no不允许
78 PasswordAuthentication yes  #允许通过密码登录
#重启ssh服务
[root@localhost ssh]# systemctl restart sshd

备注:特殊情况主机上保存了对方主机过期的公钥文件或者因为内网IP冲突,不同服务器使用同一个IP,导致前后公钥信息有差异无法发送公钥文件到目标主机
一般公钥信息都保存在文件/root/.ssh/known_hosts中,可以手动进文件删除相关信息或直接清空文件
但这可能会影响到其他主机的公钥文件
可以使用ssh-keygen来删除指定IP的公钥文件

ssh-key-gen -R 172.16.10.22

你可能感兴趣的:(第二十五节、SSH远程免密登录)