轶哥

📚 Having fun with AI Agent. Always learning.

在 Windows 中迁移 SSH 密钥
  •   更新:2023-06-14 18:22:34
  •   首发:2023-06-09 21:06:05
  •   教程
  •   2751

本文以Windows 11系统下复制密钥到另一台Windows 11设备为例,介绍如何在 Windows 设备之间迁移 SSH 密钥(此方法也使用于Unix设备的密钥迁移到Windows平台)。无论是在工作场景还是个人使用环境下,网络安全都至关重要。SSH 密钥为用户提供了一种更安全的身份验证方法,可以保护和远程服务器通讯过程中的数据。直接将~\.ssh\id_rsa~\.ssh\id_rsa.pub复制到另外一台设备是无法正常工作的,因为密钥对文件权限有着严格要求,本文讨论的就是Windows平台中密钥权限修改的问题。

准备工作

首先,确保您已经在原始设备(源设备)上生成了 SSH 密钥对。如果尚未生成,请按照以下步骤操作:

  1. 打开 PowerShell:点击开始菜单,输入 "powershell",然后右键选择 "以管理员身份运行"。
  2. 输入以下命令以生成一个新的 SSH 密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

完成后,密钥对将保存在 %USERPROFILE%\.ssh 目录下。

导出 SSH 密钥

在原始设备上执行以下操作以导出 SSH 密钥:

  1. 打开文件资源管理器,导航至密钥所在目录(例如:C:\Users\your_username\.ssh)。
  2. 将 "id_rsa" 文件(私钥)和 "id_rsa.pub" 文件(公钥)复制到一个外部存储设备,如 U 盘或其他可移动存储介质。

导入 SSH 密钥至新设备

将原始设备上的 SSH 密钥导入到新设备(目标设备),请执行以下操作:

  1. 使用外部存储设备将 "id_rsa" 和 "id_rsa.pub" 文件传输至新设备。
  2. 在新设备上,打开文件资源管理器并导航至用户目录(例如:C:\Users\your_username)。
  3. 如果不存在,创建一个名为 ".ssh" 的文件夹。
  4. 将 "id_rsa" 和 "id_rsa.pub" 文件从外部存储设备复制到新设备的 ".ssh" 文件夹中。

设置并检查 SSH 密钥

设置 SSH 密钥的权限并检查密钥格式,请遵循以下步骤:

  1. 设置 ".ssh"、"id_rsa" 和 "id_rsa.pub" 的权限以确保只有当前用户可以访问这些文件。在管理员权限的命令提示符中输入以下命令:
icacls %USERPROFILE%\.ssh /inheritance:r
icacls %USERPROFILE%\.ssh /grant "%USERNAME%":(OI)(CI)F

icacls %USERPROFILE%\.ssh\id_rsa /inheritance:r
icacls %USERPROFILE%\.ssh\id_rsa /grant "%USERNAME%":(M)
icacls %USERPROFILE%\.ssh\id_rsa.pub /inheritance:r
icacls %USERPROFILE%\.ssh\id_rsa.pub /grant "%USERNAME%":(M)

image.png

  1. 将 "id_rsa" 和 "id_rsa.pub" 文件中的 CRLF 换行符替换为 LF,然后创建临时文件并覆盖原始文件。在 PowerShell 中输入以下命令:
(Get-Content -Path $Env:USERPROFILE\.ssh\id_rsa -Raw) -replace "`r`n", "`n" | Set-Content -NoNewline -Encoding utf8 $Env:USERPROFILE\.ssh\id_rsa_tmp
Move-Item -Force $Env:USERPROFILE\.ssh\id_rsa_tmp $Env:USERPROFILE\.ssh\id_rsa

(Get-Content -Path $Env:USERPROFILE\.ssh\id_rsa.pub -Raw) -replace "`r`n", "`n" | Set-Content -NoNewline -Encoding utf8 $Env:USERPROFILE\.ssh\id_rsa.pub_tmp
Move-Item -Force $Env:USERPROFILE\.ssh\id_rsa.pub_tmp $Env:USERPROFILE\.ssh\id_rsa.pub
  1. 检查 SSH 密钥格式。私钥(id_rsa)应具有以下格式:
-----BEGIN RSA PRIVATE KEY-----
... (private key content) ...
-----END RSA PRIVATE KEY-----

注意,最后一行需要有换行

公钥(id_rsa.pub)应具有以下格式:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC... (rest of public key) your_email@example.com

确保文件内容与上述格式匹配且没有额外的空格或换行。

经过以上步骤,您迁移到新 Windows 11 设备的 SSH 密钥即可正常工作。现在,您可以使用这些密钥与远程服务器进行安全通信和身份验证。可以参考《(解决 push 到 GitHub 异常 - 无法连接22端口)》中的测试修改后的 SSH 连接方法进行测试。

请注意,为了最大程度地确保数据安全,建议定期更新 SSH 密钥并遵循网络安全最佳实践。

2023年6月14日更新: 修复cmd中执行权限命令异常。添加提示信息。

打赏
交流区

暂无内容

尚未登陆
发布
  上一篇 (普通电脑安装使用A800/A100等专业显卡)
下一篇 (在Windows平台上使用C++执行外部命令的两种方法)  

评论回复提醒