广告位

美国服务器告别密码:使用SSH密钥对实现免密登录,更安全更便捷

频道: 日期: 浏览:14
  1. 美国服务器更强的安全性

    • 抗暴力破解:密钥认证不依赖可猜测的密码,攻击者无法通过暴力破解进入。

    • 非对称加密:私钥永远不离开你的电脑,服务器只存储公钥。即使服务器被攻破,攻击者也无法反向推导出你的私钥。

    • 可设置密码短语:私钥本身可以用密码加密,提供双重保护。

  2. 更高的便捷性

    • 一键登录:配置完成后,无需每次输入密码。

    • 自动化脚本友好:为 CI/CD、备份脚本等自动化任务提供无缝认证。

  3. 更好的访问管理

    • 可以为不同设备、不同用途生成不同的密钥对,实现精细化的访问控制。吊销访问权限时,只需从服务器删除对应的公钥即可。


二、 工作原理简介

  • 私钥:保存在你的本地客户端机器上,必须严格保密,相当于你的"身份证明"。

  • 公钥:可以分发到任何你需要登录的远程服务器上,相当于"门锁"。

当连接时,服务器用公钥加密一个随机挑战信息,只有拥有对应私钥的客户端才能解密并回应这个挑战,从而证明自己的身份。


三、 实战配置:从零到免密登录

步骤 1:在本地客户端生成密钥对

打开你的终端(Linux/macOS)或 Git Bash/PowerShell(Windows),执行以下命令:

bash

ssh-keygen -t ed25519 -C "你的注释(如:my_laptop_2024)"

参数解释:

  • -t ed25519:指定使用 Ed25519 算法,它更安全、更快,密钥更短。如果你的系统过旧不支持,可以使用 -t rsa -b 4096

  • -C "注释":为密钥添加一个注释,通常用邮箱或设备名,便于识别。

执行过程示例:

bash

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/your_username/.ssh/id_ed25519): 
# 直接回车,使用默认路径Enter passphrase (empty for no passphrase): 
# 【强烈建议】输入一个密码短语,为私钥再加一把锁。即使私钥文件泄露,没有密码也无法使用。Enter same passphrase again: 
# 再次输入密码短语Your 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你的私钥,务必保密!

  • ~/.ssh/id_ed25519.pub你的公钥,可以随意分发。

步骤 2:将公钥上传到服务器

有多种方法可以将公钥上传到服务器的 ~/.ssh/authorized_keys 文件中。

方法 A:使用 ssh-copy-id(最简单,推荐)

bash

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip

系统会提示你输入服务器的密码,输入后即可自动完成配置。

方法 B:手动复制(通用)

  1. 显示并复制公钥内容

    bash

    cat ~/.ssh/id_ed25519.pub

    全选并复制输出的全部内容(形如 ssh-ed25519 AAAA... your_comment)。

  2. 登录服务器

    bash

    ssh username@server_ip

  3. 在服务器上操作

    bash

    # 1. 进入 .ssh 目录,如果不存在则创建mkdir -p ~/.sshchmod 700 ~/.ssh# 2. 将公钥追加到 authorized_keys 文件echo "你刚才复制的公钥内容" >> ~/.ssh/authorized_keys# 3. 设置正确的权限(至关重要!)chmod 600 ~/.ssh/authorized_keys

步骤 3:测试免密登录

现在,从你的本地客户端尝试登录服务器:

bash

ssh username@server_ip

如果一切配置正确:

  • 如果你为私钥设置了密码短语,系统会提示你输入私钥密码,而不是服务器用户密码。

  • 如果你没有设置私钥密码短语,你将直接登录成功

恭喜!你已成功实现 SSH 密钥对免密登录!


四、 进阶配置与优化

1. 使用 SSH Agent 管理私钥密码

如果你设置了私钥密码,每次登录都要输入会很麻烦。SSH Agent 可以帮你在一段时间内记住解密后的私钥。

bash

# 启动 SSH Agenteval "$(ssh-agent -s)"# 将私钥添加到 Agentssh-add ~/.ssh/id_ed25519# 此时会提示你输入一次私钥密码,之后在当前会话中就不再需要输入了。# 查看已添加的密钥ssh-add -l

为了省去每次打开终端都要执行上述命令的麻烦,可以将它们添加到你的 shell 启动文件(如 ~/.bashrc 或 ~/.zshrc)中。

2. 配置 SSH 客户端(可选但推荐)

编辑本地客户端的 ~/.ssh/config 文件,可以简化连接命令和管理多个服务器。

bash

# 编辑配置文件nano ~/.ssh/config

添加以下内容:

text

Host myserver # 一个简短的别名
    HostName server_ip_or_domain  # 服务器的真实IP或域名
    User your_username            # 登录用户名
    IdentityFile ~/.ssh/id_ed25519 # 指定使用的私钥文件
    Port 22                       # 如果服务器SSH端口不是22,在此指定

Host github.com # 为GitHub配置
    User git
    IdentityFile ~/.ssh/id_ed25519_github # 可以为GitHub使用不同的密钥

保存后,你就可以直接使用 ssh myserver 来登录,无需指定用户名和IP,并自动使用正确的密钥。

3. 【重要安全加固】禁用服务器密码登录

在确认使用密钥可以正常登录后,为了彻底杜绝暴力破解,可以禁用服务器的密码登录。

在服务器上操作:

bash

sudo nano /etc/ssh/sshd_config

找到并修改以下行:

text

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

重启 SSH 服务

bash

# 注意:确保你的密钥登录100%可用,否则可能把自己锁在服务器外面!sudo systemctl restart sshd# 或者 sudo service ssh restart


五、 故障排查

如果无法登录,请检查以下几点:

  1. 权限问题:服务器上 ~/.ssh 目录权限必须是 700authorized_keys 文件权限必须是 600

  2. 公钥格式:确保 authorized_keys 文件中的公钥格式正确,没有换行错误。

  3. SELinux:在某些系统(如 CentOS)上,可能需要运行 restorecon -R -v ~/.ssh 来修复 SELinux 上下文。

  4. 查看日志:在服务器上查看 /var/log/auth.log 或 /var/log/secure 来获取详细的错误信息。

总结

使用 SSH 密钥对,你不仅告别了繁琐的密码输入,更重要的是极大地提升了服务器的安全基线。记住核心三步曲:

  1. 本地生成ssh-keygen

  2. 上传公钥ssh-copy-id 或手动复制

  3. 测试登录ssh user@host

养成这个好习惯,让你的服务器管理既安全又轻松。

生成文章图片 (50).jpg

关键词: