一些实用程序(例如 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
.