说来非常灵车,我的众多vps一直使用的是强密码登录的方式,但是看着fail2ban里面几十万条的爆破纪录总是感觉不太安心,所以今天决心要折腾一下使用密钥登录ssh
原理
密钥分为公钥和私钥两部分,公钥储存在服务器上,就像锁一样保护着ssh的登录权限,私钥就是钥匙,在用户手上掌握,用户通过私钥和公钥匹配的方式来通过认证连接ssh
开始操作
1. 生成SSH密钥对
在你的本地机器上执行以下命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
参数说明:
-t rsa
: 指定密钥类型为RSA。-b 4096
: 指定密钥长度为4096位。-C "your_email@example.com"
: 添加注释(通常是你的email)。
你会看到以下提示:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/your_username/.ssh/id_rsa):
按回车键使用默认路径(或者你可以指定一个自定义路径)。
接下来,系统会提示你输入一个密码短语。这个密码短语用于保护你的私钥:
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
2. 将公钥复制到服务器
你可以使用ssh-copy-id
命令将公钥复制到服务器:
ssh-copy-id username@server_ip
系统会提示你输入服务器用户名的密码。一旦验证成功,公钥会被自动添加到服务器的~/.ssh/authorized_keys
文件中。
如果你的本地机器上没有ssh-copy-id
命令,你可以手动复制公钥。首先,使用以下命令显示公钥内容:
cat ~/.ssh/id_rsa.pub
然后,在服务器上执行以下命令(假设你已经使用密码登录到服务器):
mkdir -p ~/.ssh
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
3. 配置SSH服务器以禁用密码登录(可选)
为了进一步提高安全性,你可以配置SSH服务器以禁用密码登录。在服务器上编辑/etc/ssh/sshd_config
文件:
sudo nano /etc/ssh/sshd_config
找到以下行并修改:
PasswordAuthentication no
保存并退出编辑器,然后重启SSH服务:
sudo systemctl restart ssh
4. 测试登录
现在,你可以从本地机器使用密钥登录到服务器:
ssh username@server_ip
如果一切设置正确,你应该能够使用密钥登录到服务器,而不需要输入密码。
5. (可选)配置SSH代理
如果你不想每次都输入密码短语,可以使用ssh-agent
来管理你的SSH密钥:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
瞎聊
接下来可能会写如何将密钥配置进yubikey之中,也有可能不会,毕竟目前没什么需求
最近一直在折腾unity相关内容和vr,所以我们的vrchat从零开始系列可能又要恢复更新了
openssh被发现有重要安全漏洞,记得及时执行apt update && apt upgrade
升级版本保护机子安全