SSH 在重启时重置为默认端口

SSH 在重启时重置为默认端口

我将家庭服务器上的默认 SSH 端口(在文件中/etc/ssh/sshd_config)更改为端口 54747,然后重新启动sshsshd服务(不确定是哪一个,所以为了安全起见我都做了)。为了测试我的配置,我注销然后重新登录,没有任何问题。

几天后,我安装了 apt 更新,然后重启了服务器。当我尝试通过 SSH 重新登录(在端口 54747 上)时,出现了连接被拒绝的错误。

出于某种原因,我尝试在默认端口上使用 SSH,结果成功了!我回去检查了 sshd_config,但它仍然有自定义端口。所以我重新启动了sshsshd服务,它又恢复了“正常”行为(端口 54747 上的 ssh)。我再次尝试重新启动,连接再次被拒绝……

有谁知道我做错了什么?

更多详细信息:

  • Ubuntu 16.04.2 LTS
  • 服务器也使用 HTPC,在我的电视上打开会话(与 SSH 相同的用户)
  • 我使用笔记本电脑的 RSA 密钥进行 SSH,并禁用了密码验证
  • 我曾经使用 重启sudo reboot -h now,但搜索后发现有些人不建议这样做,所以我尝试了一下sudo reboot,但没有什么区别

编辑 事件顺序 :

  1. 将 SSH 端口从 22 更改为 54747/etc/ssh/sshd_config
  2. 重启 ssh 和 sshd 服务
  3. 结束当前 SSH 会话
  4. SSH 成功登录端口 54747
  5. 重启
  6. 端口 54747 上的 SSH 连接错误,但端口 22 上的连接成功
  7. 重启 ssh 和 sshd 服务
  8. SSH 在端口 54747 上成功重新登录,端口 22 上的连接出现错误
  9. 重启并返回 6

编辑1: netstat输出

rgo@ATLAS:~$ sudo netstat -lntp | grep :54747
rgo@ATLAS:~$ sudo netstat -lntp | grep :22
tcp6       0      0 :::22                   :::*                    LISTEN      1/init  

编辑2: service sshd status

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

编辑3: lsof -i | grep ssh

systemd      1     root   46u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
systemd      1     root   49u  IPv6  14641      0t0  TCP *:ssh (LISTEN)
sshd      4088     root    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4088     root    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)

作为参考,ATLAS 是远程服务器主机名,192.168.1.27 是我的笔记本电脑的 LAN IP,命令在步骤 6 和步骤 7 之间执行

ufw status

Status: inactive

编辑4: ps -ef |grep sshd

root      4088     1  0 22:40 ?        00:00:00 sshd: rgo [priv]
rgo       4202  4088  0 22:40 ?        00:00:00 sshd: rgo@pts/1 sshd

答案1

根据配置,ssh 可能由 systemd “套接字激活”,这意味着最初是 systemd 设置监听端口,而 sshd 仅在客户端首次连接时启动。这是为了加快启动时间:服务守护进程仅在需要时启动。

但是这意味着您还必须将 systemd 配置为匹配的端口。您将在系统配置中找到列出/lib/systemd/system/ssh.socketListenStream=22内容。要覆盖此配置,请创建一个文件(如果需要,/etc/systemd/system/ssh.socket.d/port.conf请创建目录),其中包含:ssh.socket.d

[Socket]
ListenStream=
ListenStream=54747

将数字更改为所需的端口。第一个空白条目将删除以前的默认值,后续条目将添加新的端口。这将覆盖出厂时的默认值/lib/systemd/system/ssh.socket,必须完成此外改变/etc/ssh/sshd_config

然后运行sudo systemctl daemon-reload以告诉 systemd 您的更改,以及sudo systemctl reload ssh您的 ssh 守护程序是否之前正在运行。

答案2

验证文件中的端口设置/etc/ssh/sshd_config。确保您以 sudo 或 sudo 组中的用户身份进行编辑。设置端口时,您只需在一行中输入Port 54747.Now,通过运行重新启动 ssh 服务,service sshd restart.然后通过运行重新启动并测试来验证 ssh 是否正在侦听该端口sudo netstat -lntp | grep ssh.

还要检查您的网络设置。如果您在公司网络上,请确保您处于正确的 VLAN 中。

答案3

有时事情就是会出错。如果我是你,我会尝试:

cp /etc/ssh/sshd_config $HOME
sudo apt-get --reinstall install openssh-server

答案4

当 apt 检测到你的 sshd_config 和软件包的 sshd_config 之间存在差异时,你可能只是回答 Y。它会询问你是否要安装软件包维护者的版本或保留你的版本。

相关内容