5

在 Windows 中迁移 SSH 密钥

 1 year ago
source link: https://www.wyr.me/post/756
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在 Windows 中迁移 SSH 密钥

在 Windows 中迁移 SSH 密钥

本文以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 "[email protected]"

完成后,密钥对将保存在 %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 $Env:USERPROFILE\.ssh /inheritance:r
icacls $Env:USERPROFILE\.ssh /grant "${Env:USERNAME}":(OI)(CI)F

icacls $Env:USERPROFILE\.ssh\id_rsa /inheritance:r
icacls $Env:USERPROFILE\.ssh\id_rsa /grant "${Env:USERNAME}":(M)
icacls $Env:USERPROFILE\.ssh\id_rsa.pub /inheritance:r
icacls $Env:USERPROFILE\.ssh\id_rsa.pub /grant "${Env:USERNAME}":(M)
  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) [email protected]

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK