个人用云计算学习笔记 --4(Systemd 管理系统、Linux OpenSSH 服务管理)
Systemd 管理系统(14.Systemd 管理系统)
systemd 介绍
systemd 是 Linux 系统中一套用于管理系统进程、服务、启动流程及系统资源的初始化系统(init 系统)和服务管理器,旨在替代传统的 SysV init 系统,提供更高效、更灵活的系统管理能力
- CentOS 5 使用 Sys init 引导系统启动,启动速度最慢,采用串行方式启动,无论进程相互之间有无依赖关系。
- CentOS 6 使用 Upstart init 引导系统启动,启动速度快一点,有依赖的进程之间依次启动而其他与之没有依赖关系的则并行同步启动。
- CentOS 7 使用 Systemd 引导系统启动,速度最快,所有进程无论有无依赖关系则都是并行启动(很多时候进程没有真正启动而是只有一个信号或者说是标记而已,在真正利用的时候才会真正启动)。Systemd为了解决上文的问题而诞生。它的目标是,为系统的启动和管理提供一套完整的解决方案。
systemctl 是 systemd 系统和服务管理器的命令行工具,用于管理系统服务、系统状态、启动项等,是 Linux 系统中管理服务的核心命令。
systemd本身也是服务
服务:从业务角度来称呼,例如 web 服务,数据库服务。
守护进程(daemon):web 服务器对外提供 web 服务,由 web 相关的进程提供支持。
# 安装软件包
[root@centos7 ~]# yum install -y httpd
# 启动服务
[root@centos7 ~]# systemctl start httpd
# 查看进程
[root@centos7 ~]# ps axf|tail
......
87094 ? Ss 0:00 /usr/sbin/httpd -DFOREGROUND
87096 ? S 0:00 \_ /usr/sbin/httpd -DFOREGROUND
87097 ? Sl 0:00 \_ /usr/sbin/httpd -DFOREGROUND
87098 ? Sl 0:00 \_ /usr/sbin/httpd -DFOREGROUND
87099 ? Sl 0:00 \_ /usr/sbin/httpd -DFOREGROUND
systemd 架构
unit类型
.service | 系统服务(最常用),用于管理后台进程(如 Web 服务、数据库等) | nginx.service(Nginx 服务) |
|---|---|---|
.target | 多个单元的集合,类似 “运行级别”,用于组织服务启动顺序 | multi-user.target(命令行模式) |
.socket | 网络或本地套接字,用于服务的按需激活(通过套接字请求触发服务启动) | sshd.socket(SSH 服务的套接字) |
.mount | 文件系统挂载点,定义文件系统的挂载配置 | home.mount(/home 分区挂载) |
.automount | 自动挂载点,当访问目录时自动挂载文件系统(替代传统 fstab 自动挂载) | mnt.usb.automount(USB 设备自动挂载) |
.device | 硬件设备单元,由 udev 自动生成,对应 /dev 下的设备 | sda1.device(对应 /dev/sda1 分区) |
.timer | 定时任务单元,用于替代传统 cron 实现定时执行任务 | backup.timer(定时备份任务) |
.path | 路径监控单元,当指定路径发生变化时触发其他单元(如服务) | logs.path(监控日志目录变化) |
.slice | 进程组单元,用于资源隔离(如 CPU、内存限制) | user-1000.slice(普通用户进程组) |
.scope | 临时进程组单元,通常由 systemd 自动创建(而非手动配置) | 动态管理临时启动的进程集合 |
.swap | 交换分区 / 文件单元,定义交换空间的配置 |
单元文件通常存放于:
- 系统默认路径:
/usr/lib/systemd/system/unit.service(发行版预装) - 用户自定义路径:
/etc/systemd/system/unit.service(管理员配置,优先级更高)
systemctl list-units(查看 unit 列表信息)
- UNIT:服务单元名称。
- LOAD:systemd是否正确解析了单元的配置并将该单元加载到内存中。
- ACTIVE:单元的高级别激活状态。此信息表明单元是否已成功启动。
- SUB:单元的低级别激活状态。此信息指示有关该单元的更多详细信息。信息视单元类型、 状态以及单元的执行方式而异。
- DESCRIPTION:单元的简短描述。
systemctl restart chronyd(重新对时)

systemctl status(查看 unit 的简要状态信息)
$ systemctl status sshd.service
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since 三 2022-11-09 08:45:45 CST; 5h 50min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1167 (sshd)
Tasks: 1
CGroup: /system.slice/sshd.service
└─1167 /usr/sbin/sshd -D

systemctl show(查看单个 systemd unit的详细信息(含配置信息–不常用))
控制系统服务

练习:开发一个 mm 服务
[root@centos7 ~]# cp /usr/bin/md5sum /usr/bin/mm
[root@centos7 ~]# cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/mm.service
[root@centos7 ~]# vim /etc/systemd/system/mm.service
[Unit]
Description=mm server daemon
[Service]
ExecStart=/usr/bin/mm /dev/zero
[Install]
WantedBy=multi-user.target
# 通知systemd读取变化的unit
[root@centos7 ~]# systemctl daemon-reload
[root@centos7 ~]# systemctl enable mm --now
[root@centos7 ~]# systemctl status mm
Linux OpenSSH 服务管理(15. Linux 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 建立连接的过程
主要分为下面几个阶段:
- SSH协议版本协商阶段,SSH目前包括SSH1和SSH2两个大版本。
- 密钥和算法协商阶段,SSH支持多种加密算法,双方根据自己和对端支持的算法进行协商,最终决定要使用的算法。
- 认证阶段,服务器和客户端互相进行身份验证。
- 会话请求阶段,客户端会向服务器端发送会话请求。会话请求分为这样几类:申请对数据传送进行压缩、申请伪终端、启动 X11、TCP/IP 端口转发、启动认证代理等。
- 交互会话阶段,会话请求通过后,服务器端和客户端进行信息的交互。例如运行 shell、执行命令、传递文件。
wireshark抓包:

ssh和su的区别
ssh 和 su 是 Linux 系统中两个功能不同的命令,主要区别体现在用途、作用范围和使用场景上:
定义与核心功能
ssh(Secure Shell)
是一种网络协议和命令,用于通过网络远程登录到另一台计算机(通常是服务器),并在远程主机上执行命令。
核心功能:建立加密的远程连接,让用户在本地终端操作远程主机,支持身份验证(密码或密钥)。su(Switch User)
是本地命令,用于在当前系统中切换用户身份(如从普通用户切换到 root,或切换到其他用户)。
核心功能:改变当前会话的用户权限,不涉及网络,仅在本地主机内生效。
加密类型
- 对称加密,加密和解密都使用一个钥匙。确保数据的完整性。速度快。
- 非对称加密,一对钥匙。公钥用来加密数据。私钥用来解密数据。确保数据的安全性。

双向加密过程
SSH协议是基于非对称加密方法的,服务器和客户端都会生成自己的公钥和私钥。
- 公钥用来加密数据。
- 私钥用来解密数据。
双向加密过程:
-
服务器创建密钥对。远程服务器会在/etc/ssh目录下生成一个名为多个密钥对,例如ecdsa类型的密钥对:ssh_host_ecdsa_key.pub 公钥和 ssh_host_ecdsa_key 私钥。之后每回启动sshd服务的时候,系统会自动在此路径下查找公钥。
客户端请求连接。服务器接到请求后,把公钥传给客户端使用。
-
客户端记录服务器公钥并计算自己的公私钥。客户端将服务器传来的公钥记录在**~/.ssh/known_hosts** 中,若是已经记录有该服务器公钥,则比对是否一致,一致后就计算客户端自己的公私钥。
-
客户端使用服务器的公钥加密自己的公钥并发送给服务器。服务器端拥有客户端公钥+自己私钥,客户端拥有服务器公钥+自己私钥,组成了非对称加密系统。
-
双向加解密。服务器发送数据:用客户端公钥加密,客户端收到数据后用自己私钥解密。客户端发送数据:用服务器公钥加密,服务器收到数据后用自己私钥解密。
使用 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.socket
Last 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.socket
Last 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)
参考 SSH_CONFIG(5) 。
[root@client ~]# man ssh_config
-
~/.ssh/config,用户自己的配置,优先级高于全局配置。文件权限不得高于640。
-
/etc/ssh/ssh_config,全局配置,应用于所有用户。
示例:
[laoma@client ~]$ vim .ssh/config
Host *
StrictHostKeyChecking no
User 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:
使用密钥登录,避免输入密码,更安全。
配置过程
# 客户端生成密钥对
[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
排故
ssh 问题排故:
错误现象:
[laoma@client ~ 09:07:28]$ ssh server
Bad owner or permissions on /home/laoma/.ssh/config
处理方法:
[laoma@client ~ 09:24:49]$ ll .ssh/config
-rw-rw-rw- 1 laoma laoma 50 9月 15 09:19 .ssh/config
[laoma@client ~ 09:08:46]$ chmod 600 .ssh/config
密钥文件权限不能太低,否则会显示有权限问题无法连接。
错误现象:
[laoma@client ~ 09:10:07]$ ssh server
ssh: connect to host server port 22: Connection refused
处理方法:
[laoma@client ~ 09:24:53]$ ping -c 1 server
PING server.laoma.cloud (10.1.8.10) 56(84) bytes of data.
64 bytes from server.laoma.cloud (10.1.8.10): icmp_seq=1 ttl=64 time=0.543 ms
--- server.laoma.cloud ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.543/0.543/0.543/0.000 ms
[root@server ~ 09:13:47]# systemctl is-active sshd
inactive
[root@server ~ 09:15:03]# systemctl restart sshd
[root@server ~ 09:15:36]# systemctl is-active sshd
active
错误现象:
[laoma@client ~ 09:10:50]$ ssh server
No ECDSA host key is known for server and you have requested strict checking.
Host key verification failed.
处理方法:
[laoma@client ~ 09:19:33]$ vim ~/.ssh/config
Host *
User zhangsan
#StrictHostKeyChecking yes
StrictHostKeyChecking no
StrictHostKeyChecking带有录入用户信息的功能,当前/.ssh/config 的用户信息已被删除,在无用户信息的情况下laoma无法识别zhangsan(即生成密钥后第一次连接),因此必须使用严格校验(StrictHostKeyChecking)来录入用户信息。
错误现象:
[laoma@client ~ 09:19:37]$ ssh server
zhangsan@server's password:
Last login: Mon Sep 15 08:27:10 2025 from client.laoma.cloud
This account is currently not available.
Connection to server closed.
处理方法:
[root@server ~ 09:15:44]# cat /etc/passwd | grep zhangsan
zhangsan:x:1001:1001::/home/zhangsan:/sbin/nologin
[root@server ~ 09:22:17]# usermod -s /bin/bash zhangsan
问题解决:
[laoma@client ~ 09:20:06]$ ssh server
zhangsan@server's password:
Last login: Mon Sep 15 09:20:05 2025 from client.laoma.cloud
[zhangsan@server ~ 09:22:51]$
自定义 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地址,提高连接速度。
补充
对于ssh服务来说:
- 客户端是 ssh 工具、xshell、finalshell。
- 服务端 Linux 启动了 sshd 服务。
见配置:
- PermitRootLogin no,禁止 root 用户登录。
- root用户权限不受限制。
- root用户存在每个linux系统,只需要猜密码就可以。
- 从审计角度来看,很难跟踪哪个授权用户以root身份登录并进行了更改。 如果用户必须以普通用户身份登录并切换到root帐户,则会生成一个日志事件,可用于帮助提供问责制。
- PermitRootLogin prohibit-password,禁止root用户通过密码登录。
- PasswordAuthentication no,禁止用户使用密码登录。
- AllowUsers exampleuser,允许特定用户登录,该用户可以提权为root。
- UseDNS no,客户端连接服务器的时候,服务器不需要反向解析服务端IP地址,提高连接速度。
补充
对于ssh服务来说:
- 客户端是 ssh 工具、xshell、finalshell。
- 服务端 Linux 启动了 sshd 服务。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)