设置从 Windows 到 Linux 服务器的公钥认证(ppk 私钥)

设置从 Windows 到 Linux 服务器的公钥认证(ppk 私钥)

我使用 PuTTYgen 创建了一个公钥和私钥,并将公钥复制到.ssh/authorized_keys我的用户帐户下。

然后,我尝试在登录时指定私钥,但显然它没有拾取它并继续要求我输入最初的用户名/密码。我使用 WinSCP 进行连接并在高级/身份验证部分指定私钥。我在 WinSCP 中遗漏了任何步骤吗?

在此处输入图片描述

内容authorized_keys如下

ssh-rsa AAAAB3NzaC1yc2EAAAABpEVSiiRXi7tOHpkOyFa9w2OLpBep31k9lePCK7RQxsdfs9u11+rdu0XCidRKOY5j4anD1eDaNBj87wqZbsreRe5cFcsakyGUAYXAvqgGApvsep31k9lePCK7RQxlOY5j4anD1eDaNBj8LJO++K3SkUN8E0srRBO8YyMT6Y03/F7+AAAAB3NzaC1yc2Q4h2RLGtr12CDKSBVAnFEc+JucuF4uF0WY4Sh66MSFI63mCQFu9iYNYwWyT6lUo6sks4WypEVSiiRXi7tOHpkOyFa9w2OLpBzAlTA/VSQwdNTFYUI1vquaufZ9ORzTa6dkbBRo/mLVdevYSRMSDw1BUcinYz/ogdxRvw==

我将权限更改为.ssh700 和authorized_keys600。

虽然我转到 WinSCP 中的身份验证部分并指定了私钥(如屏幕截图所示),但它看起来仍然需要用户名和密码,但没有选择它。


当我使用 PuTTY 并指定私钥时,输入登录用户名后显示

服务器拒绝我们的密钥

这是来自 PuTTY 的日志

2018-04-28 17:43:05 Connecting to 158.85.98.202 port 22
2018-04-28 17:43:05 We claim version: SSH-2.0-PuTTY_Release_0.70
2018-04-28 17:43:05 Server version: SSH-2.0-OpenSSH_7.4
2018-04-28 17:43:05 Using SSH protocol version 2
2018-04-28 17:43:05 Doing ECDH key exchange with curve Curve25519 and hash  SHA-256
2018-04-28 17:43:05 Server also has ecdsa-sha2-nistp256 host key, but we don't know it
2018-04-28 17:43:05 Host key fingerprint is:
2018-04-28 17:43:05 ssh-ed25519 256         6b:0d:e2:f6:c5:9e:15:84:0c:1b:2c:19:62:cd:5b:ef
2018-04-28 17:43:05 Initialised AES-256 SDCTR client->server encryption
2018-04-28 17:43:05 Initialised HMAC-SHA-256 client->server MAC algorithm
2018-04-28 17:43:05 Initialised AES-256 SDCTR server->client encryption
2018-04-28 17:43:05 Initialised HMAC-SHA-256 server->client MAC algorithm
2018-04-28 17:43:05 Reading key file "C:\Users\\Desktop\private_key.ppk"
2018-04-28 17:43:09 Offered public key
2018-04-28 17:43:09 Server refused our key
2018-04-28 17:43:09 Using SSPI from SECUR32.DLL
2018-04-28 17:43:09 Attempting GSSAPI authentication
2018-04-28 17:43:09 GSSAPI authentication request refused

答案1

为了避免设置公钥认证时常见的陷阱,请使用ssh-copy-id命令/脚本。由于在 Windows 上运行它会遇到麻烦,因此您可以在服务器本身上运行它。

  • 在PuTTYgen中,加载你的私钥(.ppk);

  • 复制框中的内容用于粘贴到 OpenSSH authorized_keys 文件中的公钥到剪贴板。

  • 将其粘贴到您最喜欢的编辑器中(Windows 记事本就可以)。

  • 将内容保存到.pub扩展名为 的文件中。

  • 将文件上传.pub到服务器。

  • 使用 SSH 客户端(如 PuTTY)登录服务器。

  • 在服务器上输入:

    ssh-copy-id -i mykey.pub username@localhost
    

如果你不想手动执行此操作,可以使用温SCP。它可以为你设置公钥认证。
使用工具>将公钥安装到服务器按钮SSH > 身份验证WinSCP 高级站点设置对话框的页面

在此处输入图片描述

(我是 WinSCP 的作者)


另一种选择是ssh-copy-id脚本。在 Windows 上,它随 Git for Windows 一起提供。因此,如果您有脚本,您可以在本地使用它。

答案2

如果您使用的是带有 PowerShell 的 Windows 10,则可以执行以下操作:

1. 生成密钥

首先,在 Windows 中生成 RSA 密钥。默认情况下,密钥将存储在$env:USERPROFILE\.ssh\id_rsa.pub

## Generate RSA Key
ssh-keygen -t rsa -b 4096

您可以使用-f选项添加自定义文件名和位置

## Generate RSA Key
ssh-keygen -t rsa -b 4096 -f <custom-path>

2. 将密钥复制到 Linux 服务器

## Copy to the remote server
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh <user>@<host> -p <port> "cat >> .ssh/authorized_keys"

使用自定义端口和文件路径:

## Copy to the remote server
type <custom-path> | ssh <user>@<host> -p <port> "cat >> .ssh/authorized_keys"

用您自己的信息替换<user><host>和。<port><custom-path>

3. 添加到您最喜欢的 ssh 应用程序:

您将发现两个主要文件:

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        11/23/2021   3:20 PM            199 config
-a----        11/23/2021   7:09 PM           3381 id_rsa
-a----        11/23/2021   7:09 PM            746 id_rsa.pub
-a----        11/23/2021   3:20 PM            742 known_hosts

在此示例中,id_rsa.pub是密钥,id_rsa是您的私钥。将私钥添加到 Putty 或 MobaXterm 或您想要使用的任何应用程序。

相关内容