我在 Ubuntu 22.10 上,无法更改 SSH 默认端口。我尝试了以下操作:
已编辑
/etc/ssh/sshd_config
,保留默认行#Port 22
但在其下方添加Port 1234
。然后使用以下命令在 UFW 中为其添加允许规则:
sudo ufw allow 1234
其中补充道:
到 行动 从 1234 允许 任何地方 1234(版本6) 允许 任何地方 (v6)
然后,我使用两种不同的方法重新启动了 SSH 服务(参见下面的块开头),但没有看到任何变化。服务状态表明它开始监听端口 22,为了验证这一点,我检查了监听端口,果然它仍然是 22。
$ sudo systemctl restart ssh
$ sudo service ssh restart
$ systemctl status ssh
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; disabled; preset: enabled)
Drop-In: /etc/systemd/system/ssh.service.d
└─00-socket.conf
Active: active (running) since Mon 2022-11-07 10:12:52 AEDT; 5s ago
TriggeredBy: ● ssh.socket
Docs: man:sshd(8)
man:sshd_config(5)
Process: 54858 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 54859 (sshd)
Tasks: 1 (limit: 1020)
Memory: 1.3M
CPU: 13ms
CGroup: /system.slice/ssh.service
└─54859 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
Nov 07 10:12:52 webserver.abc.com systemd[1]: Starting OpenBSD Secure Shell server...
Nov 07 10:12:52 webserver.abc.com sshd[54859]: Server listening on :: port 22.
Nov 07 10:12:52 webserver.abc.com systemd[1]: Started OpenBSD Secure Shell server.
ss -tlpn
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 *:22 *:* -
我是不是漏掉了某个步骤或者做错了什么?我确实注意到服务状态已经恢复preset: enabled
,但我读过的多本指南都没有提到禁用任何预设之类的东西。
编辑:感谢 matigo 提醒我,但sshd.service
似乎尚未安装。我有配置文件,可以很好地进行远程访问,不确定我是否只是不明白,我需要安装sshd
它来接管默认的 SSH 操作?
答案1
SSHd 现在使用基于套接字的激活 Ubuntu 22.10 或更高版本。有关此更改的更多信息,请参阅这里讨论。
TLDR:/etc/ssh/sshd_config
未使用,现在我完整阅读了评论,我发现:
# 当 sshd 是套接字激活时,不使用 Port 和 ListenAddress 选项,
# 这现在是 Ubuntu 中的默认设置。
有关详细信息,请参阅 sshd_config(5) 和 # /usr/share/doc/openssh-server/README.Debian.gz。
更改默认端口的选项:
关闭此更改并恢复到此更新之前 SSHd 的工作方式(来自特温森在上面链接的讨论中):
systemctl disable --now ssh.socket
systemctl enable --now ssh.service
- 然后 /etc/ssh/sshd_config 再次使用端口和地址设置
或者监听套接字流更新(来自萨克尔在上面链接的讨论中)
mkdir -p /etc/systemd/system/ssh.socket.d
-
cat >/etc/systemd/system/ssh.socket.d/listen.conf <<EOF [Socket] ListenStream= ListenStream=1234 EOF
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
然后它应该声明它已经开始监听新端口:
systemctl status ssh
......
11月 07 日 14:42:37 webserver.abc.com sshd[58725]: 服务器正在监听 0.0.0.0 端口 1234。11
月 07 日 14:42:37 webserver.abc.com sshd[58725]: 服务器正在监听 :: 端口 1234
答案2
这就是我解决 Ubuntu 22.10 上的 OpenSSH 端口问题的方法。
重要提示 - 请在进行更改之前进行备份或快照。
使用 nano 编辑器并更改 ListenStream 参数的值
sudo nano /lib/systemd/system/ssh.socket
将以下参数更改为您选择的端口,例如 44022
ListenStream=44022
保存文件并退出 nano 编辑器。
sudo systemctl daemon-reload<br>
sudo systemctl restart ssh<br>
sudo netstat -tulpn<br>
现在您应该能够看到端口 44022 已打开。
不要忘记在防火墙上打开端口,例如 ufw。
sudo ufw allow 44022
我建议您打开另一个 putty 会话以确保您能够登录。
答案3
SSHd 现在使用基于套接字的激活 Ubuntu 22.10 或更高版本。在此处阅读有关此更改的更多信息。
就我的目的而言,添加套接字处理程序是一种我们不想看到的复杂情况,因此我们在安装前添加以下内容以删除 ssh.socket 并重新使用 sshd_config 文件。(其中一些以前没有记录,因此这可能会为其他人节省一些时间。)
以前,我们会进行以下后期构建。
在 /etc/ssh/sshd_config 中的“#Port 22”后添加行“Port 4022”
sudo systemctl restart ssh
在新的 ubuntu 20.10(Mate 20.10)安装中似乎需要以下内容。
在 /etc/ssh/sshd_config 中的“#Port 22”后添加行“Port 4022”
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service
sudo mv /etc/systemd/system/ssh.service.d/00-socket.conf ./save_disable_ssh.service.d_00-socket.conf
sudo systemctl daemon-reload
sudo systemctl stop ssh
sudo systemctl stop ssh.socket
sudo systemctl start ssh
ymmv
答案4
@Silently 可能说得对……但systemctl disable --now ssh.socket ; systemctl enable --now ssh.service
这个方法对我来说不起作用。我不在乎 Ubuntu 团队为什么决定严重破坏 SSHD,无论他们的意图如何,他们都做错了:只有那个奇怪的“监听套接字流更新”方法有效!
更新:主题发起者没有提到你应该以稍微不同的方式来做:
-
mkdir -p /etc/systemd/system/ssh.socket.d
-
cat > /etc/systemd/system/ssh.socket.d/listen.conf << EOF [Socket] ListenStream= ListenStream=1234 EOF
以某种方式更改 SSHD 端口(我添加
/etc/ssh/sshd_config.d/local.conf
了Port 1234
)[sudo] systemctl daemon-reload
[sudo] systemctl restart ssh