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 建立连接的过程
主要分为下面几个阶段:
- SSH协议版本协商阶段,SSH目前包括SSH1和SSH2两个大版本。
- 密钥和算法协商阶段,SSH支持多种加密算法,双方根据自己和对端支持的算法进行协商,最终决定要使用的算法。
- 认证阶段,服务器和客户端互相进行身份验证。
- 会话请求阶段,客户端会向服务器端发送会话请求。会话请求分为这样几类:申请对数据传送进行压缩、申请伪终端、启动 X11、TCP/IP 端口转发、启动认证代理等。
- 交互会话阶段,会话请求通过后,服务器端和客户端进行信息的交互。例如运行 shell、执行命令、传递文件。
加密类型
- 对称加密,加密和解密都使用一个钥匙。确保数据的完整性。速度快。
- 非对称加密,一对钥匙。公钥用来加密数据。私钥用来解密数据。确保数据的安全性。
双向加密过程
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.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
处理过程:
-
查看日志
# 客户端登录的时候,监控服务端日志 [root@server ~]# tail -f /var/log/secure ...... Jul 31 16:13:41 server sshd[3693]: Authentication refused: bad ownership or modes for directory /root ......
发现提示:文件权限有问题。
-
查找文件权限。
[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