ssh隧道只能访问

Sec*_*ond 40 linux ssh ssh-tunnel

是否可以将 ssh(在 linux 上)配置为仅允许隧道访问?即用户可以设置隧道但无法获得外壳/访问文件?

ear*_*arl 55

是的,只需/bin/false用作 shell 并指示用户启动隧道 SSH 进程而不执行任何远程命令(即-NOpenSSH的标志):

ssh -N -L 1234:target-host:5678 ssh-host
Run Code Online (Sandbox Code Playgroud)

  • @mlissner:不,如果你有 `/bin/false` 作为 shell,你将没有 shell 访问权限,因为每个登录会话都会立即终止。 (15认同)

cjc*_*cjc 10

在用户的 .ssh/authorized_keys 文件中,输入如下内容:

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...
Run Code Online (Sandbox Code Playgroud)

因此,基本上,您的控件将位于用户的 ssh 公钥前面,以空格分隔。在该示例中,使用特定公钥的连接将被允许仅将 SSH 端口转发到 192.168.1.10 的 MySQL 服务器和 10.0.0.16 的 Web 服务器,并且不会分配 shell (no-pty)。您特别询问“no-pty”选项,但如果用户只应该通过隧道连接到特定服务器,则其他选项也可能有用。

有关authorized_keys 文件的更多选项,请查看sshd 的手册页。

请注意,用户的体验可能看起来有点奇怪:当他们 ssh 进入时,看起来会话正在挂起(因为他们没有得到 pty)。没关系。如果用户指定了端口转发,例如“-L3306:192.168.1.10:3306”,端口转发仍然有效。

无论如何,试一试。

  • **这是危险的建议**;`no-pty` 不会阻止 shell 访问,它只是不给 shell 一个 pty。它不显示提示(即“似乎挂起”),但您仍然可以很好地发出命令。如果你想从那里限制 shell 访问,你需要 `.ssh/authorized_keys` 中的 `command="..."` 选项。 (7认同)
  • @AleksiTorhamo 是正确的,但这只是一个开始;您还必须在 /etc/passwd 中将 shell 设置为 /usr/sbin/nologin 或 /bin/false 以完全限制 shell。我编辑了上面的条目以反映这一点以及 Aleksi 的建议。 (2认同)