当前位置: 首页 > news >正文

软件研发 --- 网络安全 之 putty生成无密码登录密钥

软件研发 --- 网络安全 之 putty生成无密码登录密钥

🔑 第一步:使用 PuTTYgen 生成密钥对

首先,我们需要使用 puttygen.exe 来创建密钥。

  1. 运行 PuTTYgen:在你的电脑上找到并双击运行puttygen.exe

  2. 选择密钥类型:建议在底部的 "Type of key to generate" 选项中选择 Ed25519RSA。这两种是目前最主流和安全的类型

  3. 生成密钥:点击 Generate 按钮。此时,你需要在进度条下方的空白区域随意移动鼠标,这个过程是为密钥生成提供随机数据,直到进度条走完即可

  4. ⚠️ 核心步骤:设置密码短语(Passphrase)

    • 要实现无密码登录,关键在于此处必须留空。请确保 "Key passphrase" 和 "Confirm passphrase" 字段保持为空白

    • ⚠️ 安全提示:无密码登录虽然方便,但也意味着任何获得你私钥的人都能直接登录你的服务器。这是一个重大的安全风险。除非是在高度受控的测试环境,否则强烈不建议在实际工作或生产环境中使用无密码的密钥。建议设置一个强密码短语(记住它),并结合下文将提到的 Pageant 工具实现“输入一次,多次免密”的效果。

  5. 保存密钥文件

    • 保存私钥:点击 Save private key 按钮,将私钥保存为一个 .ppk 文件

    • ⚠️ 复制公钥(重要):不要使用界面上的 "Save public key" 按钮,这样保存的文件格式可能会导致后续配置失败。正确的做法是:选中 "Public key for pasting into OpenSSH authorized_keys file" 文本框内的全部内容,然后复制下来。这个文本就是我们要配置到服务器上的公钥。

☁️ 第二步:将公钥部署到远程服务器

接下来,需要将公钥内容添加到远程服务器的指定文件中。

  1. 登录服务器:使用 PuTTY 或其他 SSH 客户端,通过密码方式先登录你的Linux服务器

  2. 粘贴公钥

    • 在服务器上执行以下命令,创建或编辑 authorized_keys 文件:

      bash
      mkdir -p ~/.ssh
      chmod 700 ~/.ssh
      vim ~/.ssh/authorized_keys
    • 进入编辑模式(按 i 键),将之前复制的公钥内容粘贴到一个新的一行

    • 保存并退出文件。

  3. 设置文件权限:为了安全,需要设置正确的文件权限:

    bash
    chmod 600 ~/.ssh/authorized_keys

    此命令确保只有文件所有者(你自己)可以读写这个重要的文件

🖥️ 第三步:配置 PuTTY 客户端

现在,我们回到 Windows 端,配置 PuTTY 使用刚才生成的私钥文件进行认证。

  1. 打开 PuTTY:启动 putty.exe

  2. 配置基本连接:在 "Session" 界面,输入你的服务器 IP 地址和端口号(默认为 22)

  3. 指定认证私钥(关键步骤)

    • 在左侧导航树中,依次展开并选择 Connection -> SSH -> Auth -> Credentials

    • 在右侧的 "Private key file for authentication" 部分,点击 Browse 按钮

    • 在弹出的文件选择窗口中,找到并选中你在第一步中保存的 .ppk 私钥文件。

  4. 保存会话:返回 "Session" 界面,为这个配置输入一个名称(比如 "MyServer"),然后点击 Save 按钮。这样,下次你只需要双击这个保存的会话就能直接连接,无需重复配置。

🧪 第四步:测试无密码登录

  1. 在 PuTTY 主界面,选中你刚刚保存的会话名称,然后点击 Open 按钮。

  2. 如果一切配置正确,你应该会直接进入服务器的命令行界面,而不会被提示输入密码。恭喜你,免密登录配置成功!

💡 进阶技巧:使用 Pageant 实现“一次解锁,多次免密”

如果你出于安全考虑为私钥设置了密码短语,但又不想每次登录都输入它,可以使用 PuTTY 自带的密钥管理工具 Pageant

  1. 启动 pageant.exe,它会在系统托盘区显示一个图标。

  2. 右键点击该图标,选择 "Add Key"。

  3. 选择你的 .ppk 私钥文件,并输入一次密码短语

  4. 之后,只要 Pageant 还在运行,任何 PuTTY 会话都会自动使用它加载的密钥进行认证,无需再次输入密码。这种方式很好地平衡了安全性和便利性。

🧰 常见问题排查

 
错误信息可能原因解决办法
"Permission denied (publickey)" 1. 私钥与公钥不匹配
2. 服务器上公钥配置不正确
3. 文件或目录权限设置错误
1. 重新生成并确认密钥对匹配。
2. 登录服务器,检查 ~/.ssh/authorized_keys 文件的内容是否与本地生成的公钥完全一致
3. 严格检查并修正服务器上 .ssh 目录权限为 700authorized_keys 文件权限为 600
"Server refused our key" 服务器端的 SSH 服务未开启公钥认证 登录服务器,编辑 /etc/ssh/sshd_config 文件,确认并修改以下配置:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
修改后,执行 sudo systemctl restart sshd 重启 SSH 服务。
"PuTTY key format too new" 尝试使用的私钥格式过新,与当前PuTTY版本不兼容 使用PuTTYgen工具加载你的私钥文件,然后通过菜单栏的 Conversions -> Export OpenSSH key (或类似选项)重新导出为兼容的格式。
其他问题 认证过程细节不明 在 PuTTY 中启用详细日志记录:Connection -> SSH -> Logging,然后在 "Logging" 部分选择 "SSH packets and raw data"。通过分析日志文件来定位问题根源

遵循以上步骤和提示,你应该能够顺利地配置 PuTTY 进行无密码登录。切记谨慎评估无密码登录的安全风险,并尽量采取折中方案以保障系统安全