Linux SSH 修改默认端口并设置通过密钥登录

有些服务器提供商默认只提供了密码登录SSH,并且默认端口还是22,这样很容易被各种自动化扫描服务器端口的程序扫到,极容易被爆破,不是很安全。

下面就来修改默认的SSH端口,以Ubuntu为例。

sudo su进入root环境。

修改默认端口

sshd

输入

1
vi /etc/ssh/sshd_config

找到

1
#Port 22

把前面的注释符号#去掉,然后把22改成想要的端口,最好是大于10000的以避免潜在端口冲突。比如,改成34567

保存后,重启ssh服务:

1
service sshd restart

如果这个指令没用,使用

1
service restart sshd

即可。

重启服务器之后,如果SSH端口不会恢复默认,那么就大功告成了。

ssh socket

如果你发现改完上面的sshd配置之后,可以使用设置的端口登录了,但是服务器重启之后SSH端口又变回22,但sshd_config里面Port并没有被重置,那么大概率是systemd通过ssh socket启用了ssh服务:由systemd设置ssh的端口,sshd只在客户端连接的时候启动。

这时候,在/lib/systemd/system/ssh.socket中可以发现

1
ListenStream=22

所以,还需要进行以下修改:

  1. 创建/etc/systemd/system/ssh.socket.d文件夹
  2. 创建一个conf文件来覆写ssh.socket中的某个设置,例如创建名为port.conf文件,然后输入:
    1
    2
    [Socket]
    ListenStream=34567
    34567是你想要修改成的SSH端口,最好与sshd_config中的一致。

(不是很推荐直接修改ssh.socket文件)

之后,执行

1
2
systemctl daemon-reload
systemctl reload ssh

即可。再重启服务器试试看。

设置密钥登录

生成密钥对

登录完后,直接在Linux服务器上生成密钥对:

1
ssh-keygen

Enter file in which to save the key直接按Enter,按推荐的储存位置来;Enter passphrase可以设置也可以不设置,如果设置的话之后在登录SSH的时候不仅要输入密钥还要输入这个密码,更加安全,如下图所示:

Cloudflare Tunnel介绍

创建完成后,在/home/用户名/.ssh/文件夹下能找到id_rsaid_rsa.pub,前者是私钥,后者是公钥。

安装密钥对

在Linux服务器上安装刚刚生成的公钥:

1
cd .ssh && cat id_rsa.pub >> authorized_keys

并给予拥有者读、写、执行权限:

1
chmod 600 authorized_keys && chmod 700 ~/.ssh

设置密钥登录

执行vi /etc/ssh/sshd_config编辑sshd配置文件,找到

1
#PubkeyAuthentication yes

并将前面的注释去掉,如果后面是no的话改成yes
保存后执行service sshd restart(需要root权限)。

退出,并查看是否能通过密钥登录成功。

如果想禁用密码登录的话,之后再次编辑sshd配置文件,找到

1
PasswordAuthentication yes

把后面的yes改成no,保存后执行service sshd restart即可。