使用适用于 Windows 的 Microsoft OpenSSH 服务器,我们如何在 authorized_keys 文件中的强制命令中引用空格字符?

使用适用于 Windows 的 Microsoft OpenSSH 服务器,我们如何在 authorized_keys 文件中的强制命令中引用空格字符?

我们已经设置Microsoft 的 OpenSSH 服务器实现在 Windows Server 2019 (v1809) 上,并已激活基于公钥的身份验证。我们希望部署强制命令并且正在努力路径中的空格字符此类命令。

一个简单的例子:

用户user1有以下authorized_keys文件:

command="C:\Program Files\SomePath\SomeProgram.exe" ssh-ed25519 AAAAC3N...

当我们尝试ssh以该用户身份进入该机器时,会发生以下情况:

$ ssh -i <user1_key_id> [email protected]

'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
Connection to server.example.com closed.

(请注意,我们正在运行 SSH 代理,因此上面的终端会话片段中没有密码查询。)

恕我直言,问题显然是由于应执行的程序路径中的空格字符造成的。但是,我们不确定为什么文件中命令周围的双引号authorized_keys不能防止出现问题。我们尝试使用众所周知的转义方法添加另一对双引号:

command="\"C:\Program Files\SomePath\SomeProgram.exe\"" ...

command="^"C:\Program Files\SomePath\SomeProgram.exe^"" ...
command="""C:\Program Files\SomePath\SomeProgram.exe""" ...

第一个错误与上述错误相同。第二个和第三个错误则导致另一个错误消息:

[email protected]: Permission denied (publickey).

现在我们陷入困境并有以下问题:

authorized_key我们需要如何在适用于 Windows 的 Microsoft OpenSSH 服务器的文件中写入上述命令?

答案1

要执行的命令是“command=”标记后面的整行。

需要使用引号来保护目标服务器上可执行文件路径中的空格。authorized_keys
文件中的引号需要使用反斜杠

因此,它看起来应该是这样的:

command=\"C:\Program Files\SomePath\SomeProgram.exe\" ssh-ed25519 AAAAC3N...

相关内容