是否可以配置 ssh(在 Linux 上)以仅允许隧道访问?即用户可以设置隧道但无法获取 shell/访问文件?
答案1
是的,只需用作/bin/false
shell 并指示用户启动隧道 SSH 进程而不执行任何远程命令(即-N
OpenSSH 的标志):
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'