1. 什么是 SSH 公钥认证?
SSH(Secure Shell)是一种用于安全远程登录的协议,而公钥认证是一种基于非对称加密的身份验证方式,相比密码认证更加安全可靠。
公钥认证的核心思想是:
- 服务器保存用户的 公钥(public key)
- 用户使用 私钥(private key) 进行身份验证
- 服务器验证私钥是否匹配公钥,从而决定是否允许登录
2. SSH 密钥对的生成
在客户端(例如 Linux/Mac 终端或 Windows 的 Git Bash)执行以下命令生成 SSH 密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
参数解析:
-t rsa
:指定密钥类型为 RSA(推荐使用ed25519
代替rsa
)。-b 4096
:指定 RSA 密钥长度为 4096 位(默认 2048 位)。-C "your_email@example.com"
:为密钥添加注释,便于管理。
执行后输出示例:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
默认情况下,密钥会存放在 ~/.ssh/
目录下:
- 私钥:
~/.ssh/id_rsa
(需妥善保管,切勿泄露) - 公钥:
~/.ssh/id_rsa.pub
(可安全分发给服务器)
3. 配置服务器以支持公钥认证
3.1 将公钥添加到服务器
使用以下命令将公钥复制到服务器:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
如果 ssh-copy-id
不可用,可以手动执行:
cat ~/.ssh/id_rsa.pub | ssh user@server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
3.2 修改 SSH 配置文件
确保服务器的 SSH 配置允许公钥认证,编辑 /etc/ssh/sshd_config
文件:
sudo nano /etc/ssh/sshd_config
找到并修改以下参数(如果没有,请手动添加):
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no # 关闭密码登录,增强安全性
保存并退出后,重启 SSH 服务:
sudo systemctl restart sshd # CentOS / Ubuntu
sudo service ssh restart # Debian / older systems
4. 使用 SSH 密钥进行登录
配置完成后,即可使用 SSH 密钥登录服务器:
ssh -i ~/.ssh/id_rsa user@server_ip
如果你已经将私钥默认保存在 ~/.ssh/
目录,并命名为 id_rsa
,则可以直接使用:
ssh user@server_ip
5. 使用 SSH 登录别名
为了方便管理多个 SSH 服务器,可以在 ~/.ssh/config
文件中定义别名。
5.1 编辑 SSH 配置文件
nano ~/.ssh/config
5.2 添加以下内容
Host demo
HostName server_ip
User demo
IdentityFile ~/.ssh/id_rsa
Port 22 # 可选,若更改 SSH 端口需指定
5.3 直接使用别名登录
ssh demo
6. 其他增强安全性措施
6.1 禁用 root 直接 SSH 登录
修改 /etc/ssh/sshd_config
文件,找到以下行:
PermitRootLogin no
然后重启 SSH 服务。
6.2 使用 Fail2Ban 进行 SSH 防爆破
安装 Fail2Ban 防止暴力破解:
sudo apt install fail2ban # Ubuntu/Debian
sudo yum install fail2ban # CentOS
启动并启用 Fail2Ban:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
6.3 修改默认 SSH 端口
在 /etc/ssh/sshd_config
文件中修改 Port
参数:
Port 2222 # 更换默认 22 端口
然后重启 SSH 服务:
sudo systemctl restart sshd
评论 (0)