SSHauthorized_keys 中配置的服务器端命令如何处理传入的数据?

SSHauthorized_keys 中配置的服务器端命令如何处理传入的数据?

一些实用程序(例如 git 和 Gitolite)可以通过修改文件来限制 SSH 密钥可以运行的命令authorized_key

例如,Gitolite 更改会修改文件中的条目,authorized_keys如下所示:

command="/usr/bin/gitolite/src/gitolite-shell username",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty

由于此命令在接收端运行,因此它必须处理通过 SSH 连接传入的数据流。

像这样的命令如何处理传入的数据,例如读取传入的数据流并将其发送到使用它的任何目录或进程?

答案1

它们的执行方式与 SSH 运行的任何其他命令一样。 SSH 将客户端上的 stdin/stdout/stderr 连接到服务器上启动的命令的 stdin/stdout/stderr。然后该命令可以像通常那样从 stdin 读取数据,并像通常那样通过 stdout 和 stderr 发送数据。

受到限制authorized_keys没有什么区别,除了在问题中给出的特定情况下可能会禁用 TTY 分配(端口转发和其他内容也是如此),因此即使您请求了 TTY,也不会创建它。

如果你真的跑了,那也没什么不同

ssh some-server /usr/bin/gitolite/src/gitolite-shell username

只是在这种情况下,服务器会忽略您指定的内容并运行authorized_keys.

相关内容