如何让你的服务器更安全(一):使用 SSH 密钥连接 Linux 服务器

如何让你的服务器更安全(一):使用 SSH 密钥连接 Linux 服务器
Mr. O我们在连接 Linux 服务器时,默认的方式是使用密码登录,这存在很明显的弊端:简单密码容易被破解,而复杂密码又难以记忆和输入,非常不便。
因此,使用 SSH 密钥进行登录成为了一种更安全、更高效的推荐方案。通过密钥认证,我们不仅可以免去记忆和输入繁琐密码的麻烦,还能极大提升服务器的安全性,有效抵御未授权的访问尝试。
我们将使用
Ed25519
格式密钥,它的公钥更简洁,是一种比 RSA 更现代、更安全的加密算法。
第一步:生成 SSH 密钥对
首先,在本地电脑上生成一对 SSH 密钥:
- 打开终端,运行以下命令:
1
ssh-keygen -t ed25519 -C "[email protected]"
-t ed25519
:指定密钥类型为 Ed25519。-C "[email protected]"
:为你的密钥添加一个注释,方便以后识别。
命令运行后,会提示设置保存的文件名(路径),输入文件名称或是直接回车保持默认。
1
Enter file in which to save the key (/home/your_username/.ssh/id_ed25519):
接下来,程序会提示你输入一个密码短语 (passphrase),选择是否为私钥设置密码,直接回车即是不使用密码。
1
2Enter passphrase (empty for no passphrase):
Enter same passphrase again:成功生成后,你会看到类似以下的输出:
1
2Your identification has been saved in /home/your_username/.ssh/id_ed25519
Your public key has been saved in /home/your_username/.ssh/id_ed25519.pub
此时,在 ~/.ssh/ 目录下会生成两个文件:
id_ed25519
:私钥 (private key),请务必妥善保管,切勿泄露给任何人。id_ed25519.pub
:公钥 (public key),可以安全地分享给他人或上传到服务器。
第二步:上传公钥到服务器
我们已经生成了需要使用的密钥对,下一步需要将公钥复制到你的 Linux 服务器上。
使用
ssh-copy-id
命令(推荐)
这是最简单的方法。它会自动将你的公钥复制到服务器的~/.ssh/authorized_keys
文件中,并自动设置正确的权限。运行以下命令即可:
1
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip
程序会提示你输入服务器的密码。输入密码后,公钥就会被自动上传。
手动复制
如果ssh-copy-id
不可用或是密码登录已经被禁用,我们可以手动添加。首先,在本地终端运行以下命令,查看并复制公钥内容:
1
cat ~/.ssh/id_ed25519.pub
然后通过 Web Console 登录服务器的终端后,在服务器上创建 .ssh 目录(如果不存在),并设置正确的权限:
1
2mkdir -p ~/.ssh
chmod 700 ~/.ssh接着,打开或创建 authorized_keys 文件:
1
vim ~/.ssh/authorized_keys
将你刚才在本地复制的公钥内容粘贴到文件中,然后保存并退出。
1
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... [email protected]" >> ~/.ssh/authorized_keys
最后,设置
authorized_keys
文件的权限为 600:1
chmod 600 ~/.ssh/authorized_keys
第三步:测试密钥登录
在本地终端尝试使用密钥登录服务器:
1 | ssh username@server_ip |
如果我们更改了文件名称,不是默认的 id_ed25519
,需要手动指定私钥的路径:
1 | ssh username@server_ip -i ~/.ssh/your_private_key |
如果成功登录,说明已经配置成功。
第四步:禁用密码登录
为了进一步提升服务器安全性,我们应该禁用密码登录,只允许密钥登录。
通过 SSH 密钥登录你的服务器。
在修改之前先备份原始配置
1
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
使用你喜欢的编辑器打开 SSH 配置文件:
1
sudo vim /etc/ssh/sshd_config
在文件中找到以下行,并修改它们的值:
找到PasswordAuthentication yes
,将其修改为no
。如果需要修改 SSH 连接端口,可以找到
Port 22
,将 22 设置为其他的端口保存并退出文件。
重启 SSH 服务以应用更改:
1
sudo systemctl restart sshd
如果修改了 SSH 连接端口,在断开当前链接前,一定要新开一个终端窗口进行测试能否成功连接
尝试使用密码登录服务器,测试是否可以完成登录。
第五步:使用 ~/.ssh/config
文件管理连接
如果我们的私钥文件名称不是默认名称,那么在连接服务器时需要手动指定私钥文件的路径,又或是我们更改了 SSH 链接的端口号,每次链接时也需要手动指定。
很不方便,我们可以使用 ~/.ssh/config
文件管理链接信息,它允许你为每个服务器设置一个别名和特定的连接选项。
在本地电脑上,创建或打开
~/.ssh/config
文件。为你的服务器添加一个配置,例如:
1
2
3
4
5
6
7
8
9
10
11
12
13# 服务器1配置
Host myserver
HostName 192.168.1.100 # 你的服务器 IP 地址或域名
User username # 你的用户名
Port 2222 # SSH 端口(如果不是默认的 22)
IdentityFile ~/.ssh/id_ed25519 # 指定密钥文件路径
# 服务器2配置
Host webserver
HostName example.com
User webuser
Port 2222
IdentityFile ~/.ssh/webserver_keyHost 字段是连接的别名,可以随意命名。
保存后,就可以使用别名来连接服务器了:
1
2
3ssh myserver
ssh webserver
故障排除
常见问题一般都是文件的权限问题
常见问题检查
1 | # 检查.ssh目录权限 |
正确的权限设置
~/.ssh/
目录:700 (drwx——)~/.ssh/id_ed25519
私钥:600 (-rw——-)~/.ssh/authorized_keys
:600 (-rw——-)~/.ssh/config
:600 (-rw——-)
SSH 调试模式
1 | # 使用详细模式连接,查看详细信息 |