我们已经设置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...