# 修改 ssh 端口的前因后果

今天用安卓手机 ssh 连接我的服务器的时候,出现了 kex_exchange_identification。又要修 bug 了。

百度了一下,按照 ssh连接失败,排错经验 (opens new window) 的步骤做了一下,发现 ssh 有时连得上,有时连不上。迷惑行为。

按照他的方法,关闭 ssh 服务,并开始 ssh 的调试模式:

service sshd stop
/usr/sbin/sshd -d

打开以后,貌似一切正常。

几秒以后,发现 ssh 显示了很多,然后就直接退出了???

粗略看了一下,有一个未知 ip (最后查出来是法国的)在尝试 ssh 连接我的服务器。大概是来搞我的。

于是我就把他放进 ssh 的黑名单了。

echo x.x.x.x >> /etc/hosts.allow

重新开启调试模式,发现几秒以后他又关掉了。

这次是江苏的。

重复了一次,发现又有一个北京的。

????

大家都来搞我???

ssh 没有仅允许白名单访问的方法,那咋办嘛。

后来突然想到,不应该用默认端口的,否则他发现端口可用就可以暴力破解了!

于是下面才是正题:如何更改 ssh 的端口。

# 修改方法

vi /etc/ssh/sshd_config
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

现在的端口 Port 是默认的 22,我们要修改,先要把 Port 前注释的 # 去掉,然后把 22 改为自己想要的数字(0-65535 都可,只要不跟自己其他的端口重合)。

Port 2333
#AddressFamily any

然后再开调试模式,发现一切都和平了。

以后要 ssh 远程的时候,就要带一个端口参数了。对于 39.1.2.3 的服务器的 2333 端口,应该使用

ssh -p2333 root@39.1.2.3

即可。