侧边栏壁纸
博主头像
Backspace‘s Blog 博主等级

行动起来,活在当下

  • 累计撰写 33 篇文章
  • 累计创建 8 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Debian13开启SSH远程登录,更改 SSH 端口

Backspace
2025-09-18 / 0 评论 / 1 点赞 / 27 阅读 / 0 字 / 正在检测是否收录...

在Debian系统中开启远程root登录及更改SSH端口,需要修改SSH服务端(`sshd`)的配置文件并调整防火墙。**核心操作是修改 /etc/ssh/sshd_config 文件。**

### ⚙️ 一、开启SSH远程登录及修改端口核心操作步骤

1. 备份配置文件(非常重要)

在进行任何修改之前,请先备份:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

2. 编辑SSH配置文件

使用你熟悉的编辑器(如`nano`)打开配置文件:

sudo nano /etc/ssh/sshd_config

3. 修改关键配置项

在文件中找到或添加以下两行并进行修改:

* 更改端口:找到 #Port 22 这一行,删除开头的 # 符号,并将 22 更改为你想要的端口号(例如 2222)。

 Port 2222

注意:端口号需在 102465535 之间,且未被其他服务占用。

* 允许root登录:找到 #PermitRootLogin prohibit-password 这一行,删除 # 并修改为以下两种方式之一:

* 允许使用密码登录(安全性较低):

PermitRootLogin yes

* 仅允许使用密钥登录(推荐,安全性高):

PermitRootLogin prohibit-password

这要求你必须先将公钥配置到root用户的 ~/.ssh/authorized_keys 文件中。

4. 保存配置文件,然后重启SSH服务使配置生效:

sudo systemctl restart ssh

如果系统使用`sshd`(通常是Debian 11及以后),请使用:

sudo systemctl restart sshd

### 🛡️ 二、关键安全配置与验证

修改完成后,**必须**在新端口生效且确认可以连接之前,保持当前的SSH会话不关闭。

1. 配置防火墙(如果启用)

如果系统使用了`ufw`或`iptables`防火墙,**必须放行新的SSH端口**。

* 对于 ufw

sudo ufw allow 2222/tcp
sudo ufw reload

* 对于 iptables

sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

2. 使用新配置进行连接测试

打开**另一个终端窗口**,使用新的端口(和root用户)尝试连接:

ssh -p 2222 root@你的服务器IP

只有在新窗口连接成功后,才能安全关闭原来的终端会话,这是防止配置错误导致自己被锁在服务器外的关键。

### ⚠️ 三、重要安全提醒

1. 绝不建议仅使用密码:如果必须开启密码登录,请务必设置一个**极其复杂**的root密码,并**立即**安装并配置 fail2ban 等防暴力破解工具。

2. 限制访问范围:更安全的做法是结合防火墙,仅允许特定的IP地址段访问SSH端口。例如,在 sshd_config 中添加:

AllowUsers root@你的可信IP

ListenAddress 你的服务器内网IP

3. 使用非root用户:最佳实践是**完全禁用root远程登录**,创建一个具有`sudo`权限的普通用户进行远程管理,这比直接暴露root账户安全得多。

请根据你的具体需求和网络环境,谨慎选择配置。如果你在操作中遇到问题(例如连接失败),请提供具体的错误信息以便进一步排查。

###🔒四、修改SSH.SOCKET

各位在玩机过程中可能会碰到一些奇怪的问题,例如修改 /etc/ssh/sshd_config 的 SSH 端口配置不会生效。我们编辑好 sshd_config 后重启 SSH ,执行 systemctl status sshd.service 会看到下面的效果:

* ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Sun 2024-01-14 11:34:43 UTC; 3s ago
TriggeredBy: * ssh.socket
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 4820 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 4821 (sshd)
      Tasks: 2 (limit: 19660)
     Memory: 2.8M
        CPU: 57ms
     CGroup: /system.slice/ssh.service
             |-4794 "sshd: [accepted]"
             `-4821 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Jan 14 11:34:43 xxx systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
Jan 14 11:34:43 xxx systemd[1]: ssh.service: Found left-over process 4794 (sshd) in control group while starting unit. Ignoring.
Jan 14 11:34:43 xxx systemd[1]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
Jan 14 11:34:43 xxx sshd[4821]: Server listening on :: port 22.
Jan 14 11:34:43 xxx systemd[1]: Started ssh.service - OpenBSD Secure Shell server.

我们一眼发现 Server listening on :: port 22. 还是在监听 22 端口,没有生效。

这是怎么回事呢?我们来对比以下普通机器的日志:

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Sun 2024-01-14 06:42:21 EST; 3s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 2496 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 2498 (sshd)
      Tasks: 1 (limit: 1025)
     Memory: 1.4M
        CPU: 21ms
     CGroup: /system.slice/ssh.service
             └─2498 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Jan 14 06:42:21 xxx systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
Jan 14 06:42:21 xxx sshd[1498]: Server listening on 0.0.0.0 port 11451.
Jan 14 06:42:21 xxx sshd[1498]: Server listening on :: port 11451.
Jan 14 06:42:21 xxx systemd[1]: Started ssh.service - OpenBSD Secure Shell server.

仔细一看,最大的差别在于,第一台机子是 TriggeredBy: * ssh.socket 的!
此乃何物?这是较新的发行版启用的特性。以前,我们的 SSH 服务是由 sshd 程序持续监听 TCP 端口,等待我们连接;新的方式则是由 systemd 管理这个监听端口,在探测到有发起的连接时,再拉起 sshd 进行处理。

这有什么好处?最大的好处就是节约内存,因为后台不再需要一直运行 sshd ,从而能获得闲时可达 5% 的内存节约。这种白嫖内存的好事,难怪卖 LXC 容器的商家会这么积极地采用呢。

但于此同时,SSH 服务的监听端口不再受到 sshd_config 控制,在此做的修改无效了。

所以怎么办?

方法一:禁用 ssh.socket

systemctl disable --now ssh.socket
systemctl restart sshd.service

执行上述命令后就会发现端口更改生效了

方法二:更改 ssh.socket 配置

ssh.socket 的配置文件在 /lib/systemd/system/ssh.socket ,直接更改即可

[Unit]
Description=OpenBSD Secure Shell server socket
Before=sockets.target
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Socket]
ListenStream=22 # 改我改我
Accept=no

[Install]
WantedBy=sockets.target

改完后执行:

systemctl daemon-reload
systemctl restart ssh.socket
systemctl restart ssh.service

我想节约内存怎么办

很简单,只需要启用 ssh.socket 即可

systemctl enable --now ssh.socket

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区