Linux SSH 修改默认端口并设置通过密钥登录
Linux SSH 修改默认端口并设置通过密钥登录
Katorly使用 Ubuntu 22.04 进行演示。
先sudo su
进入root环境。
修改默认端口
有些服务器提供商默认只提供了密码登录SSH,并且默认端口还是22,这样很容易被各种自动化扫描服务器端口的程序扫到,极容易被爆破,不是很安全。
sshd
输入
1 | vi /etc/ssh/sshd_config |
找到
1 | #Port 22 |
把前面的注释符号#
去掉,然后把22
改成想要的端口,最好是大于10000的以避免潜在端口冲突。比如,改成34567
。
保存后,记得防火墙放行设置的端口,例如使用ufw(若没有ufw可以执行apt-get install ufw
安装):
1 | ufw allow 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服务器账号目录下的.ssh/authorized_keys
文件中,只需要将公钥内容粘贴到该文件中,不需要在服务器上存放对应的私钥,即可在登录SSH的时候使用自己的私钥进行密钥登录。
此前都是在root环境下进行操作的,现在执行
1 | exit |
退出root环境,回到非root账号下。
创建非root账号请见此:https://blog.katorly.com/What-to-do-with-New-VPS
还可以执行
1 | whoami |
查看是否还在root账号下,如果返回的不是root
就不是。
生成密钥对
如果此前没有过密钥对,可以在自己本地电脑生成密钥对。如果有密钥对了请跳过此步,直接在下一步上传公钥内容即可。一个人只需要一组密钥对就行,生成太多不方便管理。
在本地适合存放文件的地方,执行下面这个指令,生成密钥对:
1 | ssh-keygen -t rsa -f id_rsa |
Enter file in which to save the key
直接按Enter,按推荐的储存位置来;Enter passphrase
可以设置也可以不设置,如果设置的话之后在登录SSH的时候不仅要输入密钥还要输入这个密码,更加安全,如下图所示:
创建完成后,能找到id_rsa
和id_rsa.pub
,前者是私钥,后者是公钥。
安装密钥对
复制id_rsa.pub
中的内容,在Linux服务器上自己的账号目录下(/home/username
)新建一个文件夹,名为.ssh
:
1 | mkdir .ssh |
然后,在该文件夹里新建一个authorized_keys
文件,粘贴并保存刚刚生成的公钥:
1 | vim .ssh/authorized_keys |
并给予自己读、写权限:
1 | chmod 600 .ssh/authorized_keys |
之后就可以使用密钥登录了。
设置密钥登录
执行vi /etc/ssh/sshd_config
编辑sshd配置文件,找到
1 | #PubkeyAuthentication yes |
并将前面的注释去掉,如果后面是no
的话改成yes
。
保存后执行service sshd restart
(需要root权限)。
退出,并查看是否能通过密钥登录成功。
如果想禁用密码登录的话,之后再次编辑sshd配置文件,找到
1 | PasswordAuthentication yes |
把后面的yes
改成no
,保存后执行service sshd restart
即可。