git 和 Gitolite 等一些实用程序可以通过修改authorized_key
文件来限制 SSH 密钥可以运行的命令。
例如,Gitolite 更改会修改authorized_keys
文件中的条目,因此:
command="/usr/bin/gitolite/src/gitolite-shell username",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
由于此命令在接收端运行,它必须处理来自 SSH 连接的数据流。
像这样的命令如何处理传入的数据,例如读取传入的数据流并将其发送到使用它的任何目录或进程?
它们像 SSH 运行的任何其他命令一样执行此操作。SSH 将客户端上的 stdin/stdout/stderr 连接到服务器上启动的命令的 stdin/stdout/stderr。然后该命令可以像通常那样从 stdin 读取数据,并像通常那样通过 stdout 和 stderr 发送数据。
受到限制
authorized_keys
没有区别,除了 TTY 分配可能会被禁用,如问题中给出的特定情况(端口转发和其他事情也是如此),因此即使您要求 TTY,也不会创建它。如果你真的跑,那也没什么不同
只是在这种情况下,服务器会忽略您指定的内容并运行
authorized_keys
.