当前位置: 首页 > news >正文

Linux 系统管理-15-OpenSSH 服务管理

文章目录

  • OpenSSH 服务管理
    • 环境准备
    • OpenSSH 服务介绍
      • SSH 介绍
      • SSH 建立连接的过程
      • 加密类型
      • 双向加密过程
    • 使用 ssh 访问远端CLI
      • ssh 工具演示
      • ssh工具配置文件
    • 配置 ssh 密钥认证
      • 配置过程
      • 排故
    • 自定义 SSH 服务
      • 配置文件
      • 禁止 root 登录
      • 禁止密码登录
      • 只允许特定用户登录

OpenSSH 服务管理

环境准备

准备两台虚拟机:

  • server 虚拟机,并设置ip地址为10.1.8.10/24。
  • client 虚拟机,并设置ip地址为10.1.8.11/24。

设置主机名称和名称解析,以client为例:

# 永久设置主机名
[root@localhost ~]# hostnamectl set-hostname client.laoma.cloud# 临时设置
[root@localhost ~]# hostname client.laoma.cloud# 验证
[root@client ~]# bash# 准备名称解析
[root@client ~]# echo "10.1.8.10 server.laoma.cloud server 
10.1.8.11 client.laoma.cloud client" >> /etc/hosts

IP地址通过图形化配置,过程省略。

OpenSSH 服务介绍

SSH 介绍

SSH 全称是 Secure Shell,SSH协议是基于应用层的协议,为远程登录会话和其他网络服务提供安全性的协议。

实现此功能的传统方式,如 telnet (终端仿真协议)、 rcp、ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH 提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。

SSH 建立连接的过程

主要分为下面几个阶段:

  1. SSH协议版本协商阶段,SSH目前包括SSH1和SSH2两个大版本。
  2. 密钥和算法协商阶段,SSH支持多种加密算法,双方根据自己和对端支持的算法进行协商,最终决定要使用的算法。
  3. 认证阶段,服务器和客户端互相进行身份验证。
  4. 会话请求阶段,客户端会向服务器端发送会话请求。会话请求分为这样几类:申请对数据传送进行压缩、申请伪终端、启动 X11、TCP/IP 端口转发、启动认证代理等。
  5. 交互会话阶段,会话请求通过后,服务器端和客户端进行信息的交互。例如运行 shell、执行命令、传递文件。

加密类型

  • 对称加密,加密和解密都使用一个钥匙。确保数据的完整性。速度快。
  • 非对称加密,一对钥匙。公钥用来加密数据。私钥用来解密数据。确保数据的安全性。

对称加密和非对称加密

双向加密过程

SSH协议是基于非对称加密方法的,服务器和客户端都会生成自己的公钥和私钥。

  • 公钥用来加密数据。
  • 私钥用来解密数据。

双向加密过程:

  1. 服务器创建密钥对。远程服务器会在/etc/ssh目录下生成一个名为多个密钥对,例如ecdsa类型的密钥对:ssh_host_ecdsa_key.pub 公钥和 ssh_host_ecdsa_key 私钥。之后每回启动sshd服务的时候,系统会自动在此路径下查找公钥。

    客户端请求连接。服务器接到请求后,把公钥传给客户端使用。

  2. 客户端记录服务器公钥并计算自己的公私钥。客户端将服务器传来的公钥记录在**~/.ssh/known_hosts** 中,若是已经记录有该服务器公钥,则比对是否一致,一致后就计算客户端自己的公私钥。

  3. 客户端使用服务器的公钥加密自己的公钥并发送给服务器。服务器端拥有客户端公钥+自己私钥,客户端拥有服务器公钥+自己私钥,组成了非对称加密系统。

  4. 双向加解密。服务器发送数据:用客户端公钥加密,客户端收到数据后用自己私钥解密。客户端发送数据:用服务器公钥加密,服务器收到数据后用自己私钥解密。

使用 ssh 访问远端CLI

ssh 工具演示

方式一:只指定IP或主机名

# 通过IP地址
[laoma@client ~]$ ssh 10.1.8.10
The authenticity of host '10.1.8.10 (10.1.8.10)' can't be established.
ECDSA key fingerprint is SHA256:pplZ4EZPQ8M/f7qvKaAffxbf+vKYJg9HCojrmqctkck.
Are you sure you want to continue connecting (yes/no/[fingerprint])? `yes`
Warning: Permanently added '10.1.8.10' (ECDSA) to the list of known hosts.
laoma@10.1.8.10's password: `redhat`
Activate the web console with: systemctl enable --now cockpit.socketLast login: Wed Jul 24 19:25:34 2024 from 10.1.8.1# 通过主机名称
[laoma@client ~]$ ssh server
The authenticity of host 'server (10.1.8.10)' can't be established.
ECDSA key fingerprint is SHA256:pplZ4EZPQ8M/f7qvKaAffxbf+vKYJg9HCojrmqctkck.
Are you sure you want to continue connecting (yes/no/[fingerprint])? `yes`
Warning: Permanently added 'server,10.1.8.10' (ECDSA) to the list of known hosts.
laoma@server's password: `redhat`
Activate the web console with: systemctl enable --now cockpit.socketLast login: Wed Jul 24 19:25:34 2024 from 10.1.8.1

方式二:额外指定用户名

# 指定root用户登录
[laoma@client ~]$ ssh root@server
# 或者
[laoma@client ~]$ ssh -l root server

方式三:额外指定命令

# 同时指定用户和命令
[laoma@client ~]$ ssh laoma@server hostname
laoma@server's password: `redhat`
server.laoma.cloud
# shell提示符,仍然是本机。
[laoma@client ~]$

ssh工具配置文件

参考 SSH_CONFIG(5)

[root@client ~]# man ssh_config
  • ~/.ssh/config,用户自己的配置,优先级高于全局配置。文件权限不得高于640。

  • /etc/ssh/ssh_config,全局配置,应用于所有用户。

示例:

[laoma@client ~]$ vim .ssh/config
Host *StrictHostKeyChecking noUser root# 清空其他主机秘钥
[root@client ~]# > .ssh/known_hosts# 再次登录不会提示主机key是否校验,验证用户也是root
[root@client ~]# ssh server
Warning: Permanently added 'server,10.1.8.10' (ECDSA) to the list of known hosts.
root@server's password: 

参数说明:

  • **Host ***,匹配所有目标服务器。
  • StrictHostKeyChecking no,连接目标服务器不校验主机key,直接接受。
  • User root,连接目标服务器默认使用laoma账户。
  • PreferredAuthentications password,连接目标服务器使用密码认证。
  • IdentityFile,指定私钥位置。

配置文件权限:建议设置为只能用户自己读写。

[laoma@client ~]$ ssh server
Bad owner or permissions on /home/laoma/.ssh/config[laoma@client ~]$ chmod 600 .ssh/config 
[laoma@client ~]$ ssh server
root@server's password: 

配置 ssh 密钥认证

使用密钥登录,避免输入密码,更安全。

配置过程

# 客户端生成密钥对
[laoma@client ~]$ ssh-keygen 
Generating public/private rsa key pair.# 私钥保存位置
Enter file in which to save the key (/home/laoma/.ssh/id_rsa):`回车` # 私钥加密密码,回车表示不加密
Enter passphrase (empty for no passphrase): `回车`
# 再次回车
Enter same passphrase again: `回车`Your identification has been saved in /home/laoma/.ssh/id_rsa.
Your public key has been saved in /home/laoma/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:OAfLyL6KIXr44DV7vhpystqqXwsbFl2tGP6HZP4GLR4 laoma@server.laoma.cloud
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|       .         |
|    . o .        |
|   + * =         |
|  . * O.S        |
|   o =E+.        |
|+++=o.++.        |
|=*B=++.o.        |
|OB*+*o...        |
+----[SHA256]-----+# 查看生成的文件
[laoma@client ~]$ ls .ssh/
config  id_rsa  id_rsa.pub  known_hosts# 将公钥推动给目标服务器上的目标用户
[laoma@client ~]$ ssh-copy-id laoma@server# 验证
[laoma@client ~]$ ssh laoma@server hostname
server.laoma.cloud# 推送公钥相当于:
# 将公钥内容保存到目标服务器上目标用户家目录下.ssh/authorized_keys中
[laoma@client ~]$ cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtFoo/sD+pB1uBw9XMuXLcO//RgghgHeYjdibXMCtw5UUf/H5lYcP4ZjCbQTdmH7n0ZkxYriIU+Q6atY0Jel3+sWzCD3K9DSU8g5Ux2wjCrVhFJGTtsMXeI+XqQW0MqY2Gn9KtC098JKlzikUz+SbDe61vyqCYHVeBNmWtTtZORhywHlN4HxLIGOlGvnPrXI8+uhdgBqV6Sxo0XkpOvB2y+0Kjxb0SQUCYpdkT/cJqUz2Bm/diPEDmHPvlVn3/chD7Uvt++wQhGCFEPGBawQIsb7sT73UpIQ20vaxjs8okQ1XZNzHW1KnLBhYskrtWU7HIHHTWObpw5mwoXj64wcPX laoma@client.laoma.cloud# 在server端查看
[laoma@server ~]$ cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtFoo/sD+pB1uBw9XMuXLcO//RgghgHeYjdibXMCtw5UUf/H5lYcP4ZjCbQTdmH7n0ZkxYriIU+Q6atY0Jel3+sWzCD3K9DSU8g5Ux2wjCrVhFJGTtsMXeI+XqQW0MqY2Gn9KtC098JKlzikUz+SbDe61vyqCYHVeBNmWtTtZORhywHlN4HxLIGOlGvnPrXI8+uhdgBqV6Sxo0XkpOvB2y+0Kjxb0SQUCYpdkT/cJqUz2Bm/diPEDmHPvlVn3/chD7Uvt++wQhGCFEPGBawQIsb7sT73UpIQ20vaxjs8okQ1XZNzHW1KnLBhYskrtWU7HIHHTWObpw5mwoXj64wcPX laoma@client.laoma.cloud# 推给目标主机root用户
[root@server ~]# mkdir -m 700 .ssh
[root@server ~]# cp ~laoma/.ssh/authorized_keys .ssh# 客户端验证
[laoma@client ~]$ ssh root@server hostname
server.laoma.cloud

以非交互方式生成密钥对

[laoma@client ~]$ ssh-keygen -t rsa -N '' -f id_rsa_new
[laoma@client ~]$ ls *new*
id_rsa_new  id_rsa_new.pub

其他选项

# -p选项指定目标服务器 sshd 服务端口号,默认22
[laoma@client ~]$ ssh -l root -p 1022 server hostname
root@server's password: 
server.laoma.cloud# -i 指定私钥位置
[laoma@client ~]$ mv .ssh/id_rsa /tmp
[laoma@client ~]$ ssh -i /tmp/id_rsa root@server hostname
server.laoma.cloud# 如果找不到密钥,则使用密码登录
[laoma@client ~]$ ssh root@server hostname
root@server's password: 

排故

故障:配置密钥登录后,远程登录仍要需要输入密码验证。

[root@client ~]# ssh 'root@10.1.8.10' hostname
root@10.1.8.10's password: 

模拟:将目标主机上目标用户的家目录的权限改为777。

[root@server ~]# chmod 777 /root

处理过程:

  1. 查看日志

    # 客户端登录的时候,监控服务端日志
    [root@server ~]# tail -f /var/log/secure
    ......
    Jul 31 16:13:41 server sshd[3693]: Authentication refused: bad ownership or modes for directory /root
    ......
    

    发现提示:文件权限有问题。

  2. 查找文件权限。

    [root@server ~]# ls -ld /root
    drwxrwxrwx. 3 root root 4096 Jul 31 16:09 /root# 更改权限
    [root@server ~]# chmod 700 /root
    

自定义 SSH 服务

配置文件

sshd服务配置文件:/etc/ssh/sshd_config。帮助 sshd_config(5)

常见配置:

  • PermitRootLogin no,禁止 root 用户登录。
    • root用户权限不受限制。
    • root用户存在每个linux系统,只需要猜密码就可以。
    • 从审计角度来看,很难跟踪哪个授权用户以root身份登录并进行了更改。 如果用户必须以普通用户身份登录并切换到root帐户,则会生成一个日志事件,可用于帮助提供问责制。
  • PermitRootLogin prohibit-password,禁止root用户通过密码登录。
  • PasswordAuthentication no,禁止用户使用密码登录。
  • AllowUsers exampleuser,允许特定用户登录,该用户可以提权为root。
  • UseDNS no,客户端连接服务器的时候,服务器不需要反向解析服务端IP地址,提高连接速度。

禁止 root 登录

# 即使配置了免密登录,也无法远程登录
[laoma@client ~]$ ssh root@server
root@server's password: 
Permission denied, please try again.
root@server's password: 
Permission denied, please try again.
root@server's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).# 使用普通用户登录,然后提权为root用户
[laoma@client ~]$ ssh laoma@server
[laoma@server ~]$ su -
[root@server ~]#

禁止密码登录

# laowang账户未配置密钥登录,直接拒绝
[laoma@client ~]$ ssh laowang@server
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

只允许特定用户登录

例如laoma用户。

# laowang输入正确的密码也无法登录
[laoma@client ~]$ ssh laowang@server
laowang@server's password: 
Permission denied, please try again.
laowang@server's password: 
Permission denied, please try again.
laowang@server's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).[laoma@client ~]$ ssh laoma@server hostname
server.laoma.cloud
http://www.dtcms.com/a/311529.html

相关文章:

  • NLP——Transformer
  • flutter实时播报的桌面应用遇到的问题
  • I2C(韦东山HAL库)
  • 2023年ASOC SCI2区TOP,可修灰狼优化算法RGWO+燃料电池参数辨识,深度解析+性能实测
  • 【无标题】根据11维拓扑量子色动力学模型(11D-TQCD)与当代宇宙学理论的融合分析,宇宙轮回的终结机制及其最终状态可系统论述如下:
  • 商品中台数据库设计
  • WPFC#超市管理系统(4)入库管理
  • 音视频学习(四十八):PCM和WAV
  • 基于深度学习的医学图像分析:使用GAN实现医学图像增强
  • 进阶向:Python生成艺术图案(分形、数学曲线)
  • MySQL索引解析
  • vue3pinia
  • Corrosion2靶机
  • Cyber Weekly #63
  • 搜索引擎评估革命:用户行为模型如何颠覆传统指标?
  • Sklearn 机器学习 数据聚类 用Numpy自己实现聚类
  • 【C++】类和对象(2)
  • 使用keil点亮stc8核心板的灯
  • 逻辑回归 银行贷款资格判断案列优化 交叉验证,调整阈值,下采样与过采样方法
  • MQTT 入门教程:MQTT工具调式
  • 堆----2.前 K 个高频元素
  • VirtualBox 的 HOST 键(主机键)是 右Ctrl 键(即键盘右侧的 Ctrl 键)笔记250802
  • 学习笔记:无锁队列的原理以及c++实现
  • Linux 高级 I/O 系统调用详解
  • Vue 响应式基础全解析2
  • Node.js中path模块的使用指南
  • InfluxDB 与 Node.js 框架:Express 集成方案(二)
  • 如何在`<link type=“icon“ href=`的`href`中写SVG并使用path标签? 笔记250802
  • 嵌入式 C 语言入门:递归与变量作用域学习笔记 —— 从概念到内存特性
  • 深入 Go 底层原理(十三):interface 的内部表示与动态派发