相信很多人的服务器都有被恶意扫描的情况,有的甚至还被暴力破解过。服务器安全维护除了最基本的修改常用端口外,传统的密码登录方式已不再被推荐,因为这已经成为一种安全隐患。SSH 远程连接推荐安全可靠的密钥登录方式如今已经成为主流,它可以很好的解决服务器暴力破解或是忘记密码等问题。
一、生成密钥对
可在服务端或者本地通过以下命令生成密钥对 (Windows 或 Linux 均支持):
ssh-keygen
执行上面命令后,之后一路回车,默认不设密码,密钥存放目录默认为 ~/.ssh
(此为隐藏目录)该目录下同时包含了下面四个文件:
文件名称 | 说明 |
---|---|
authorized_keys | Linux 公钥验证检测文件,存放远程免密登录的公钥 |
id_rsa | 生成的私钥文件 |
id_rsa.pub | 生成的公钥文件 |
known_hosts | 已知的主机公钥清单 |
注意:若为 Windows 系统,默认私钥存放在
C:Usersyour name.ssh
目录下。
二、安装公钥至服务端/远端
服务端或本地生成的密钥对,对于不同情况安装公钥的方法有所不同,请根据具体情况进行操作。
1、若密钥对由服务端/远端生成
如果生成密钥的操作是在服务端 / 远端进行的,为防止与服务器彻底失联,请提前保存私钥 id_rsa
文件到本地,然后输入在服务端输入以下命令安装公钥:
# 进入密钥存放目录,默认~/.ssh目录下cd ~/.ssh# 将生成的公钥追加到主机 authorized_keys 文件中cat id_rsa.pub >> authorized_keys
注意:一个公钥只允许一个用户登录和使用
2、若密钥对由本地生成
如果生成密钥的操作是在本地终端上进行的,那么输入以下命令将公钥上传到 VPS:
ssh-copy-id username@remote-ip -p port
username
为用户名,remote-ip
为远程IP地址,port
为端口号。
在没有 ssh-copy-id
的情况下(比如在 Windows 上), 也可以用命令来操作:
ssh username@remote-ip -p port 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
命令的含义是,在远端新建
.ssh
文件夹,并把本地的~/.ssh/id_rsa.pub
(公钥)追加到远端的.ssh/authorized_keys
中。
当然,你也可以手动进行操作,先复制公钥,再登录 VPS ,粘贴到 .ssh/authorized_keys
中。
三、服务端配置文件目录权限
# 给文件赋权sudo chmod 600 authorized_keys# 给目录赋权sudo chmod 700 ~/.ssh
四、服务端开启密钥登陆功能
1、登录服务器修改 SSH 配置文件
sudo vim /etc/ssh/sshd_config
2、查看确认下面两项配置
RSAAuthentication yesPubkeyAuthentication yes
当你已完成上面全部设置,并确认已成功通过密钥方式登录后,根据需要决定是否禁用密码登录(可选),sshd_config
文件修改配置项,如下:
PasswordAuthentication no
3、重启 SSH
sudo service sshd restart
五、本地免密登录远程服务器
如果客户端为 windows,私钥文件 id_rsa
应存在于 C:Usersyour name.ssh
目录下,或是在登陆时指定私钥地址:
ssh -i /path/to/id_rsa username@remote-ip
username
为用户名,remote-ip
为IP地址,/path/to/id_rsa
密钥的完整路径
如果是使用 VS Code
远程连接则需要在配置中需要指定私钥地址:
Host MyServer HostName *.*.*.* // 服务器ip地址 User root // 用户名 Port xxxx //端口号 IdentityFile "D:小姐姐的家ssh-keyid_rsa" //id_rsa 的文件路径