SSH隧道只能访问

是否有可能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-cclosures连接。

分配一个不允许用户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即可

另外使用AllowGroupsMatch Group选项。

在这里充分说明: http : //blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/