轶哥

📚 Having fun with AI Agent. Always learning.

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

    本文以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++执行外部命令的两种方法)  

    评论回复提醒