ssh 隧道仅访问

ssh 隧道仅访问

是否可以配置 ssh(在 Linux 上)以仅允许隧道访问?即用户可以设置隧道但无法获取 shell/访问文件?

答案1

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

ssh -N -L 1234:target-host:5678 ssh-host

答案2

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

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...

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

查看 sshd 的手册页,了解更多选项authorized_keys 文件

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

无论如何,尝试一下吧。

答案3

为用户提供一个只允许他们注销的 shell,例如/usr/local/bin/press_to_exit.sh

#!/bin/bash
read -n 1 -p "Press any key to exit" key

这样,他们可以根据需要保持登录状态,隧道保持活动状态,但不能运行任何命令。Ctrl-C关闭连接。

答案4

​##Create a new user

sudo useradd -m [user]

##Edit /etc/ssh/sshd_config

Match User [user]
   #AllowTcpForwarding yes
   #X11Forwarding no
   #PermitTunnel no
   GatewayPorts yes ##Enable listening on 0.0.0.0
   AllowAgentForwarding no
   PermitOpen localhost:2888 ##specify port
   ForceCommand echo 'This account can only be used for Tunneling'

相关内容