SSH免密登录

SSH提供两种登录认证方法:

1.基于口令的认证(password认证):客户端向服务器发出password认证请求,将用户名和密码加密后发送给服务器,服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败消息。

2.基于密钥的认证(publickey认证):客户端产生一对公共密钥,将公钥保存到将要登录的服务器上的那个账号的家目录的.ssh/authorized_keys文件中。认证阶段:客户端首先将公钥传给服务器端。服务器端收到公钥后会与本地该账号家目录下的authorized_keys中的公钥进行对比,如果不相同,则认证失败;否则服务端生成一段随机字符串,并先后用客户端公钥和会话密钥对其加密,发送给客户端。客户端收到后将解密后的随机字符串用会话密钥发送给服务器。如果发回的字符串与服务器端之前生成的一样,则认证通过,否则,认证失败。

注意,客户端生成的密钥的位置:家目录/.ssh/

服务端接收的客户端公钥位置:所接收公钥的用户家目录/.ssh/authorized_keys

服务端的ssh配置文件位置:/etc/ssh/sshd_config

这里我们介绍一下基于密钥的认证方式:

1.至少两台虚拟机,一个服务端,和一个客户端。

2.安装openssh-server和openssh-client包

3.客户端生成密钥对,将公钥传给服务端对应的用户

4.完成以上就可以实现免密登录了

1.安装ssh服务包,一般linux都自带ssh,以下是安装方法

sudo apt update        #更新数据
sudo apt upgrade        #更新软件
sudo apt install openssh-server  #下载安装ssh服务的服务器
sudo apt install openssh-client  #下载安装ssh服务的客户端

查看安装情况

[root@RedHat1 /]# rpm -qa | grep ssh
libssh-config-0.9.6-3.el9.noarch
libssh-0.9.6-3.el9.x86_64
openssh-8.7p1-8.el9.x86_64
openssh-clients-8.7p1-8.el9.x86_64
openssh-server-8.7p1-8.el9.x86_64

2.客户端生成密钥对,将公钥传给服务端用户(客户端的redhat生成密钥对,传给服务端的root,使其客户端的redhat用户可以免密登录服务端的root用户),用户生成的密钥一般都放在:家目录/.ssh/下面

[redhat@RedHat2 ~]$ ssh-keygen -t rsa        #生成密钥的命令
Generating public/private rsa key pair.
Enter file in which to save the key (/home/redhat/.ssh/id_rsa):    #密钥存储的路径,默认
Created directory '/home/redhat/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/redhat/.ssh/id_rsa
Your public key has been saved in /home/redhat/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:IzZYWxVf8T+0c8tK/FsOxuzGS/09dDcCob5q3O5iSQo redhat@RedHat2
The key's randomart image is:
+---[RSA 3072]----+
|          o.  o. |
|         . o . . |
|      . . . o  ..|
|     o o . .  . o|
|    . = S   .  +o|
|   E . + o  .+.+B|
|    . + o .  +Oo*|
|     . * o  .+=++|
|      o.=o   oo+*|
+----[SHA256]-----+

 生成的密钥

[redhat@RedHat2 .ssh]$ ll
总用量 8
-rw-------. 1 redhat redhat 2602  5月  8 14:45 id_rsa
-rw-r--r--. 1 redhat redhat  568  5月  8 14:45 id_rsa.pub
[redhat@RedHat2 .ssh]$ pwd
/home/redhat/.ssh
[redhat@RedHat2 .ss

 把公钥传给服务端用户,这里我选择的是服务端的root用户,所以服务端的root要设置为可以远程登录

[redhat@RedHat2 .ssh]$ ssh-copy-id root@192.168.127.128

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/redhat/.ssh/id_rsa.pub"
The authenticity of host '192.168.127.128 (192.168.127.128)' can't be established.
ED25519 key fingerprint is SHA256:SHjgLanz+sXKdJ4sEK/HUgVudvFs/MZyklxQ29B8wL8.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes   #是否确定要传,选择yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.127.128's password:     #输入服务端用户的密码

3.免密登录对方用户

[redhat@RedHat2 ~]$ ssh root@192.168.127.128    #远程登录服务端的root用户

Activate the web console with: systemctl enable --now cockpit.socket

Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last failed login: Wed May  8 14:53:40 CST 2024 from 192.168.127.129 on ssh:notty
There were 5 failed login attempts since the last successful login.
Last login: Wed May  8 14:52:01 2024
[root@RedHat1 ~]#         #可见已经跳转到服务端的root用户,中间并没有输入密码

 

扩展配置:

实验1:修改ssh服务的端口号

[root@RedHat1 redhat]# setenforce 0          #修改强化的linux框架,使它处于Permissive宽松状态
[root@RedHat1 redhat]# getenforce            #查看
Permissive                           #默认是Enforcing,严格状态,它会限制其他不常规端口的访问

[root@RedHat1 redhat]# vim /etc/ssh/sshd_config    #修改端口号
Port 2000
[root@RedHat1 redhat]# systemctl restart sshd      #重启sshd服务

[C:\~]$ ssh root@192.168.127.128 2000              #远程连接后面要写上对应的端口号

实验2:拒绝root用户远程登陆

#请保持服务器上至少有一个可以远程登陆的普通远程账号
#修改配置文件如下:
#打开该选项并修改参数为no
PermitRootLogin no
#重启服务后生效,使用时使用普通用户进行登陆,需要使用root用户时再切换

 实验3:允许特定用户ssh登陆,其他用户都无法登陆(白名单一样)

#编辑配置文件,在最后添加如下内容:
AllowUsers USERNAME
#USERNAME为你允许登陆的账号【需要在系统中useradd该账号】,如果是多个用户,中间用空格隔开
#重启ssh服务后生效

相关推荐

  1. ssh登录

    2024-05-10 01:06:05       37 阅读
  2. ssh 登录

    2024-05-10 01:06:05       26 阅读
  3. SSH登录

    2024-05-10 01:06:05       12 阅读
  4. ssh登录

    2024-05-10 01:06:05       6 阅读
  5. 快速配置ssh登录

    2024-05-10 01:06:05       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 01:06:05       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 01:06:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 01:06:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 01:06:05       18 阅读

热门阅读

  1. baxter机械臂校准

    2024-05-10 01:06:05       12 阅读
  2. 网络安全零信任学习2:零信任概念

    2024-05-10 01:06:05       8 阅读
  3. mybatis 中 #{}和 ${}的区别是什么?

    2024-05-10 01:06:05       11 阅读
  4. 3D旋转rotatex

    2024-05-10 01:06:05       14 阅读
  5. 详解Go语言Map

    2024-05-10 01:06:05       10 阅读
  6. c#读取hex文件方法,相对来说比较清楚

    2024-05-10 01:06:05       12 阅读
  7. 【网络】TCP的长连接是如何实现的

    2024-05-10 01:06:05       9 阅读
  8. AtCoder Beginner Contest 336 D题 Pyramid

    2024-05-10 01:06:05       13 阅读
  9. 今日总结2024/5/9

    2024-05-10 01:06:05       11 阅读