是否有可能configurationssh(在Linux上)只允许隧道访问? 即用户可以安装隧道,但不能得到一个shell /访问文件?
是的,只需使用/bin/false
作为shell,并指示用户启动隧道SSH进程而不执行任何远程命令(即OpenSSH的-N
标志):
ssh -N -L 1234:target-host:5678 ssh-host
在用户的.ssh / authorized_keys文件中,放置如下内容:
permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...
所以,基本上,你的控件将在用户的ssh公钥前面分隔一个空格。 在这个例子中,使用特定公钥的连接将只允许SSH端口转发到192.168.1.10的MySQL服务器和10.0.0.16的Web服务器,并且不会被分配一个shell(no-pty)。 您具体询问“no-pty”选项,但其他人也可能是有用的,如果用户只能隧道到特定的服务器。
查看sshd的手册页以获取更多的authorized_keys文件选项。
请注意,用户的体验可能看起来有点奇怪:当他们ssh时,它会看起来像会议挂起(因为他们没有得到一个pty)。 没关系。 如果用户指定了端口转发,例如“-L3306:192.168.1.10:3306”,端口转发仍然有效。
无论如何,试试吧。
给用户一个只允许他们注销的shell,如/bin/press_to_exit.sh
#!/斌/庆典 读-n 1 -p“按任意键退出”键
这样他就可以保持login状态,只要他愿意,隧道活动,但不能运行任何命令。 Ctrl-c
closures连接。
分配一个不允许用户login的shell。
例如
#!/bin/sh echo "No interactive login available." sleep 60 exit 0
将阻止他们得到一个shell提示符,并给他们一个60秒的超时 – 如果60秒没有连接活动,那么它将退出,从而完全断开连接(根据需要增加数量)。
他们也不能执行远程命令,因为那个shell不会让他们。
我的解决scheme是向没有交互式shell的用户提供只能通过隧道操作的用户将/ etc / passwd中的shell设置为/ usr / bin / tunnel_shell 。
只需用无限循环创build可执行文件/ usr / bin / tunnel_shell即可 。
另外使用AllowGroups
和Match Group
选项。
在这里充分说明: http : //blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/