SSH 公钥认证登录

尽意
2025-02-08 / 0 评论 / 57 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2025年02月08日,已超过76天没有更新,若内容或图片失效,请留言反馈。

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
1

评论 (0)

取消