将客户端公钥复制到 Windows OpenSSH SFTP/SSH 服务器授权密钥文件的命令

将客户端公钥复制到 Windows OpenSSH SFTP/SSH 服务器授权密钥文件的命令

我有一台 Linux 机器,我需要通过 SFTP 连接到 Windows SFTP 服务器。因此,第一步,我在 Linux 机器上创建自己的id_rsa文件。id_rsa.pub

然后我将中的文本复制id_rsa.pubid_rsa.pubSFTP 服务器中。

并且sftp连接工作正常。

但是,我想问一下将公钥从客户端复制到服务器的命令。我在 Google 中搜索后得到一个命令:

ssh-copy-id -i id_rsa.pub ftp_user*@10.7.8.32

但我遇到了以下错误:

‘exec’ 未被识别为内部或外部命令、可运行程序或批处理文件。系统找不到指定的路径。

在此处输入图片描述

我相信有一些命令可以解决这个问题,对吧?我不需要手动将公钥复制到 SFTP 服务器。

SFTP版本是SFTP协议版本3。

答案1

ssh-copy-id脚本只针对 *nix 服务器(或具有* nix 仿真的服务器)有效,因为它在服务器上内部执行一些 *nix shell 命令(如、、、、、、、exec等)。shumaskrmmkdirtailcat


您可以手动设置密钥。我知道您知道这一点,但由于在 Windows 服务器上执行此操作时存在细微差别,因此我还是会提到这一点,以方便其他读者。

主要步骤为:

  • .ssh在 Windows 帐户配置文件文件夹(通常在)中创建文件夹C:\Users\username\.ssh。请注意,管理员文件的位置在默认sshd_config文件中被覆盖为%ALLUSERSPROFILE%\ssh\administrators_authorized_keys
  • 在文件夹中创建authorized_keys文件并将您的公钥添加到其中。
  • 确保文件夹.ssh(或管理员ssh)的 ACL 和authorized_keys设置使得只有相应的 Windows 帐户对该文件夹和文件具有写访问权限,而运行服务器的帐户具有读取访问权限。

有关详细信息,请参阅我的指南设置 SSH 公钥认证在 Win32-OpenSSH 上。


如果你想从本地机器执行此操作,你可以使用sftp。特别是如果你还没有在服务器上注册密钥,你可以将id_rsa.pub文件上传为authorized_keys文件:

$ sftp [email protected]
[email protected]'s password:
Connected to [email protected].
sftp> mkdir .ssh
sftp> cd .ssh
sftp> put id_rsa.pub authorized_keys
Uploading id_rsa.pub to /C:/Users/martin/.ssh/authorized_keys
id_rsa.pub                                   100%  401   197.5KB/s   00:00
sftp> bye                  

以上基本上就是ssh-copy-id内部所做的 – 除了ssh-copy-id附加之外authorized_keys,plainsftp无法执行的操作。如果需要附加,您可以下载authorized_keys到本地计算机,在本地附加,然后重新上传。


或者,你可以使用以下方法从另一台 Windows 计算机设置密钥(我的)WinSCP 客户端将公钥安装到服务器功能

另请参阅我的回答设置从 Windows 到 Linux 服务器的公钥认证(ppk 私钥)

答案2

您可以按照 Microsoft 文档进行操作 -https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement#deploying-the-public-key

摘要(供管理员使用)

  • ssh-key-gen使用客户端上的命令生成 ssh 密钥文件。
  • 将文件复制id_rsa.pub到位于 的 Windows 服务器C:\ProgramData\ssh\administrators_authorized_keys
  • 使用命令更新 Windows 服务器上的 ACL
    icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
    
  • 现在您应该能够使用 ssh 从客户端无需密码即可连接到 Windows 服务器。

答案3

答案可能是各不相同根据用户是否是管理员,以及语言系 统 。

生成 ssh 密钥

用于ssh-keygen生成公钥id_rsa.pub和私钥id_rsa

ssh-keygen

检查用户是否属于管理员组

用 列出群组whoami

whoami /groups

检查您是否属于BUILTIN\Administrators 团体。名称可能会根据您的语言而变化。例如,在法语中为BUILTIN\Administrateurs

写入authorized_keys文件

在 Windows 上,有一个例外管理员且检查的文件为C:\ProgramData\ssh\administrators_authorized_keys。否则,文件检查为%USERPROFILE%\.ssh\authorized_keys

你可以消除例外经过评论最后两行sshd_config文件。

# Match Group administrators
#     AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

否则,作为行政只需创建C:\ProgramData\ssh\administrators_authorized_keys,并在其中写入内容id_rsa.pub

scp id_rsa.pub USERNAME@HOSTNAME:/ProgramData/ssh/administrators_authorized_keys

如果你用户,将 的内容写入id_rsa.pub文件C:\Users\USER\.ssh\authorized_keys

更改 上的权限authorized_keys

您可以使用icacls.exe来检查文件的权限。

 icacls.exe administrators_authorized_keys

如果文件的权限不正确,OpenSSH 将拒绝对您进行身份验证authorized_key

移除继承

icacls.exe administrators_authorized_keys /inheritance:r

授予系统和管理员组权限

icacls.exe administrators_authorized_keys /grant SYSTEM:F
icacls.exe administrators_authorized_keys /grant Administrators:F

您可能需要将最后一条命令更改为匹配您的语言。例如,在法语中,命令将是。

icacls.exe administrators_authorized_keys /grant Administrateurs:F

答案4

你可以用以下方式复制

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh [email protected] "cat >> .ssh/authorized_keys"

相关内容