SSH 默认端口未改变(Ubuntu 22.10)

SSH 默认端口未改变(Ubuntu 22.10)

我在 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 再次使用端口和地址设置
  • 或者监听套接字流更新(来自萨克尔在上面链接的讨论中)

    1. mkdir -p /etc/systemd/system/ssh.socket.d
    2. cat >/etc/systemd/system/ssh.socket.d/listen.conf <<EOF
      [Socket]
      ListenStream=
      ListenStream=1234
      EOF
      
    3. sudo systemctl daemon-reload
    4. 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,无论他们的意图如何,他们都做错了:只有那个奇怪的“监听套接字流更新”方法有效!

更新:主题发起者没有提到你应该以稍微不同的方式来做:

  1. mkdir -p /etc/systemd/system/ssh.socket.d
    
  2. cat > /etc/systemd/system/ssh.socket.d/listen.conf << EOF
    [Socket]
    ListenStream=
    ListenStream=1234
    EOF
    
  3. 以某种方式更改 SSHD 端口(我添加/etc/ssh/sshd_config.d/local.confPort 1234

  4. [sudo] systemctl daemon-reload

  5. [sudo] systemctl restart ssh

相关内容