Linux SSH 修改默认端口并设置通过密钥登录
Linux SSH 修改默认端口并设置通过密钥登录
Katorly有些服务器提供商默认只提供了密码登录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 |
所以,还需要进行以下修改:
- 创建
/etc/systemd/system/ssh.socket.d
文件夹 - 创建一个
conf
文件来覆写ssh.socket
中的某个设置,例如创建名为port.conf
文件,然后输入:1
2[Socket]
ListenStream=3456734567
是你想要修改成的SSH端口,最好与sshd_config
中的一致。
(不是很推荐直接修改ssh.socket
文件)
之后,执行
1 | systemctl daemon-reload |
即可。再重启服务器试试看。
设置密钥登录
生成密钥对
登录完后,直接在Linux服务器上生成密钥对:
1 | ssh-keygen |
Enter file in which to save the key
直接按Enter,按推荐的储存位置来;Enter passphrase
可以设置也可以不设置,如果设置的话之后在登录SSH的时候不仅要输入密钥还要输入这个密码,更加安全,如下图所示:
创建完成后,在/home/用户名/.ssh/
文件夹下能找到id_rsa
和id_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
即可。