我将家庭服务器上的默认 SSH 端口(在文件中/etc/ssh/sshd_config
)更改为端口 54747,然后重新启动ssh
和sshd
服务(不确定是哪一个,所以为了安全起见我都做了)。为了测试我的配置,我注销然后重新登录,没有任何问题。
几天后,我安装了 apt 更新,然后重启了服务器。当我尝试通过 SSH 重新登录(在端口 54747 上)时,出现了连接被拒绝的错误。
出于某种原因,我尝试在默认端口上使用 SSH,结果成功了!我回去检查了 sshd_config,但它仍然有自定义端口。所以我重新启动了ssh
和sshd
服务,它又恢复了“正常”行为(端口 54747 上的 ssh)。我再次尝试重新启动,连接再次被拒绝……
有谁知道我做错了什么?
更多详细信息:
- Ubuntu 16.04.2 LTS
- 服务器也使用 HTPC,在我的电视上打开会话(与 SSH 相同的用户)
- 我使用笔记本电脑的 RSA 密钥进行 SSH,并禁用了密码验证
- 我曾经使用 重启
sudo reboot -h now
,但搜索后发现有些人不建议这样做,所以我尝试了一下sudo reboot
,但没有什么区别
编辑 事件顺序 :
- 将 SSH 端口从 22 更改为 54747
/etc/ssh/sshd_config
- 重启 ssh 和 sshd 服务
- 结束当前 SSH 会话
- SSH 成功登录端口 54747
- 重启
- 端口 54747 上的 SSH 连接错误,但端口 22 上的连接成功
- 重启 ssh 和 sshd 服务
- SSH 在端口 54747 上成功重新登录,端口 22 上的连接出现错误
- 重启并返回 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.socket
的ListenStream=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。它会询问你是否要安装软件包维护者的版本或保留你的版本。