当前位置: 首页 > 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.lryc.cn/news/608195.html

相关文章:

  • 【Pytorch✨】LSTM 入门
  • Next.js 怎么使用 Chakra UI
  • 洛谷做题4:P5713 【深基3.例5】洛谷团队系统
  • OAuth 2.0 详解:现代授权的核心协议
  • 知识随记-----Qt 实战教程:使用 QNetworkAccessManager 发送 HTTP POST
  • Web前端实现银河粒子流动特效的3种技术方案对比与实践
  • C#中的除法
  • 【Web】CCF智能汽车大赛-CTF遴选赛 wp
  • LVGL代码框架简介
  • 苹果MAC 安卓模拟器
  • 计算机网络:任播和负载均衡的区别
  • 【QT】Qt信号与槽机制详解信号和槽的本质自定义信号和槽带参数的信号和槽
  • 【Python修仙编程】(二) Python3灵源初探(11)
  • linux中pthread_t 的值与top -Hp中线程id值的区别
  • 知识随记-----用 Qt 打造优雅的密码输入框:添加右侧眼睛图标切换显示
  • Autosar Nm-网管报文PNC停发后无法休眠问题排查
  • Antlr4在Windows环境下的配置
  • 涉水救援机器人cad【12张】三维图+设计书明说
  • Vue 服务端渲染 Nuxt 使用详解
  • AI Agent开发学习系列 - LangGraph(6): 有多个节点的Sequential Graph(练习解答)
  • 深入理解C++中的Lazy Evaluation:延迟计算的艺术
  • LangGraph认知篇-Command函数
  • UDP通信中BIND端口号的作用解析,LOCALPORT的关系解析
  • 搜索与图论(最小生成树 二分图)
  • 【Django】-5- ORM的其他用法
  • 企业级单点登录(SSO)技术详解:从原理到安全实践
  • 前端与后端部署大冒险:Java、Go、C++三剑客
  • ARM Cortex-M异常处理高级特性详解
  • 集成电路学习:什么是HAL硬件抽象层
  • 【DL学习笔记】计算图与自动求导