Linux sshd 服务管理

Linux sshd 服务管理

环境准备

环境准备

以链接克隆方式克隆原先的server虚拟机,取名为client,并设置ip地址为10.1.8.11/24。

使用 ssh 访问远端CLI

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工具配置文件

参考 SSH_CONFIG(5)

  • ~/.ssh/config,用户自己的配置,优先级高于全局配置。文件权限不得高于640。

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

示例:

[root@client ~ 10:00:38]# touch .ssh/config
[root@client ~ 10:00:43]# vim .ssh/config
#清空其他主机秘钥
[root@client ~ 10:01:18]# > .ssh/know_hosts
[root@client ~ 10:01:39]# ssh server

[root@client ~ 10:02:26]# ssh server
root@server's password: 
Last login: Mon Jul 28 10:01:53 2025 from 10.1.8.11
[root@centos7 ~ 10:02:38]# 登出
Connection to server closed.
[root@client ~ 10:02:41]# chmod 600 .ssh/config
[root@client ~ 10:03:03]# ssh server
root@server's password: 
Last login: Mon Jul 28 10:02:38 2025 from 10.1.8.11

配置 ssh 密钥认证

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

配置过程
[yy@client ~ 10:16:50]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yy/.ssh/id_rsa): 
Created directory '/home/yy/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/yy/.ssh/id_rsa.
Your public key has been saved in /home/yy/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:H4vXeFErqw8rPRE81Cgic3G1xnC/aFeKbft/XrrqSf8 yy@client.yy.cloud
The key's randomart image is:
+---[RSA 2048]----+
|      ..o.oo     |
|    o o..+oo.    |
|     + . ++ . o  |
|         .++ = . |
|        S =oO .  |
|         +.B =   |
|        ..*.*   .|
|        ..o* + .o|
|         .o+=.==E|
+----[SHA256]-----+
[yy@client ~ 10:18:05]$ kLL
[yy@client ~ 10:18:05]$ ls .ssh/
id_rsa  id_rsa.pub
[yy@client ~ 10:18:24]$ ssh-copy-id yy@server
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/yy/.ssh/id_rsa.pub"
The authenticity of host 'server (10.1.8.10)' can't be established.
ECDSA key fingerprint is SHA256:4DX8/XM7hweueZS8vIZBefb0jomvD2qeZYF+j6MZlCk.
ECDSA key fingerprint is MD5:a3:76:06:d9:9d:c7:5a:a5:1e:d6:4c:6e:a3:73:ac:6b.
[yy@client ~ 10:26:31]$ ssh yy@server
Last failed login: Mon Jul 28 10:26:27 CST 2025 from client.yy.cloud on ssh:notty
There were 2 failed login attempts since the last successful login.
Last login: Mon Jul 28 10:23:54 2025 from client.yy.cloud
[yy@server ~ 10:24:57]$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzuoG81TRoxoRrY18siXD8CUJeGLwUblmqoKRUVoHTKsRrrX1wIJbG3G9qDXdNrnsnRgG2FZufx7Lxw0tctRlRVuNczQghAJtaEAM/hombyEAVij+pD+frdc7jpbVl/L8GSBzNtlqbfCxtiJcrNDWkvcCl8cczuOEAOgjAXjwEDnRUu87ov5mrgNQsEbmfehl3/rMaySqjYS6eTarR6CJWX4NEoggVm1i5hoIuLdSWRSEth8KpNwzuVAExU7Ivn0ZkCs1nP+1Kk5vsXHBxAZeCf2zX+/uhXItYkYt1/8Hy7RrvA6WQKtO9aoFRsnqcLgeQ6Kqhb0S5Pbss8qqrEQEv yy@client.yy.cloud


[yy@client ~ 10:27:08]$ ssh-copy-id root@server
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/yy/.ssh/id_rsa.pub"
/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@server's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@server'"
and check to make sure that only the key(s) you wanted were added.

[yy@client ~ 10:27:36]$ ssh root@server hostname
server.yy.cloud

排故

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

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

处理过程:

  1. 查看日志

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

查找文件权限。

[root@centos7 ~]# ll .ssh/
total 12
-rw-------. 1 root root  576 Jul 31 16:11 authorized_keys

[root@centos7 ~]# ls -ld .ssh/
drwx------. 2 root root 61 Jul 31 16:11 .ssh/

[root@centos7 ~]# ls -ld /root
drwxrwxrwx. 3 root root 4096 Jul 31 16:09 /root

# 更改权限
[root@centos7 ~]# 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。

根据以上修改配置文件

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值