我有一台 Linux 机器,我需要通过 SFTP 连接到 Windows SFTP 服务器。因此,第一步,我在 Linux 机器上创建自己的id_rsa
文件。id_rsa.pub
然后我将中的文本复制id_rsa.pub
到id_rsa.pub
SFTP 服务器中。
并且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
等)。sh
umask
rm
mkdir
tail
cat
您可以手动设置密钥。我知道您知道这一点,但由于在 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"