SSH:authorized_keys 中 no-pty 登录选项的影响

SSH:authorized_keys 中 no-pty 登录选项的影响

我对 中添加到密钥中的登录选项restrict的行为感到困惑。no-pty~/.ssh/authorized_keys

对于给定的密钥,我打算阻止任何相互作用除了启动到特定本地端口的 SSH 隧道:

restrict,permitopen="localhost:80" ssh-rsa AAAAB3NzaC1yc2EAAA[...]3c7rmJT5/ [email protected]

实际效果是,通过相应的私钥识别,我可以创建一个隧道,但显然还可以执行任意命令

tunnel@a $ ssh -i tunnel_rsa [email protected]

PTY allocation request failed on channel 0
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-64-generic x86_64)

[...]

You have new mail.

ls .ssh/
authorized_keys
id_rsa
id_rsa.pub
known_hosts

注意PTY allocation request failed on channel 0会话开始时的消息(表明登录选项具有一些效果)和ls .ssh/带有其输出的命令。

没有提示,但这不是我想要做的。有人能解释一下吗?此外,将给定的密钥限制为仅创建隧道的首选方法是什么?

更新

隧道restrict实际上没有工作:

$ curl localhost:8080
curl: (52) Empty reply from server

或者使用 HTTPie:

$ http :8080
http: error: ConnectionError: ('Connection aborted.', BadStatusLine("''",))

命令输出如下ssh -L ...

channel 2: open failed: administratively prohibited: open failed

它确实可以使用no-pty选项而不是来工作restricted,但是原始问题仍然存在。

答案1

经过一些研究和实验,这个选项的组合似乎可以起到作用:

command="",restrict,port-forwarding,permitopen="localhost:80"

让我逐一介绍一下它们:

  • command=""

    禁止使用此键执行任何命令

  • restrict

    一次禁用所有选项,例如 TTY 分配、端口转发、代理转发、user-rc 和 X11 转发。

  • port-forwarding

    启用 TCP 端口转发,但请参见下文。

  • permitopen="localhost:80"

    将 TCP 端口转发限制为本地端口80。这就是仅有的此键应允许的事情。

我主要通过阅读来弄清楚这一点OpenSSH WikiBook 的客户端配置文件章节,因此大部分功劳都归于作者(Lars Noodén 等人)。缺少的部分是port-forwarding- 如果没有它,则禁止转发,尽管permitopen会建议转发。

相关内容