在Debian系统中开启远程root登录及更改SSH端口,需要修改SSH服务端(`sshd`)的配置文件并调整防火墙。**核心操作是修改 /etc/ssh/sshd_config 文件。**
### ⚙️ 一、开启SSH远程登录及修改端口核心操作步骤
1. 备份配置文件(非常重要)
在进行任何修改之前,请先备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak2. 编辑SSH配置文件
使用你熟悉的编辑器(如`nano`)打开配置文件:
sudo nano /etc/ssh/sshd_config3. 修改关键配置项
在文件中找到或添加以下两行并进行修改:
* 更改端口:找到 #Port 22 这一行,删除开头的 # 符号,并将 22 更改为你想要的端口号(例如 2222)。
Port 2222 注意:端口号需在 1024 到 65535 之间,且未被其他服务占用。
* 允许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/tcpsudo ufw reload * 对于 iptables:
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT2. 使用新配置进行连接测试
打开**另一个终端窗口**,使用新的端口(和root用户)尝试连接:
ssh -p 2222 root@你的服务器IP只有在新窗口连接成功后,才能安全关闭原来的终端会话,这是防止配置错误导致自己被锁在服务器外的关键。
### ⚠️ 三、重要安全提醒
1. 绝不建议仅使用密码:如果必须开启密码登录,请务必设置一个**极其复杂**的root密码,并**立即**安装并配置 fail2ban 等防暴力破解工具。
2. 限制访问范围:更安全的做法是结合防火墙,仅允许特定的IP地址段访问SSH端口。例如,在 sshd_config 中添加:
AllowUsers root@你的可信IP或
ListenAddress 你的服务器内网IP3. 使用非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
评论区