Answers:
在用户的.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服务器,并且不会被分配外壳程序(无pty)。您是在专门询问“ no-pty”选项,但是如果仅应将用户引导到特定服务器,则其他选项也可能有用。
在sshd的手册页上查看有关authorized_keys文件的更多选项。
请注意,用户的体验可能看起来有些奇怪:ssh进入时,会话看起来像正在挂起(因为他们没有生气)。没关系。如果用户使用例如“ -L3306:192.168.1.10:3306”指定了端口转发,则该端口转发仍将有效。
无论如何,请尝试一下。
no-pty
不会阻止shell访问,只是不会给shell带来麻烦。它不会显示提示(即“似乎挂起”),但是您仍然可以很好地发出命令。如果要从那里限制对Shell的访问,则需要中的command="..."
选项.ssh/authorized_keys
。
分配一个不允许用户登录的外壳。
例如
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
会阻止他们获得shell提示,并给他们60秒钟的超时时间-如果60秒钟内没有活动的连接,它将退出并因此完全断开它们(根据要求增加数量)。
他们也不能执行远程命令,因为该Shell不会允许他们。
logout
” 相同的效果。
/sbin/nologin
,您可以使用中的用户友好消息对其进行自定义/etc/nologin.txt
。
我的解决方案是为仅提供隧道服务的用户(而不提供交互式shell)将/ etc / passwd中的该shell设置为/ usr / bin / tunnel_shell。
只需使用无限循环创建可执行文件/ usr / bin / tunnel_shell即可。
另外,使用AllowGroups
和Match Group
选项。
此处有完整说明: http ://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/
-N
,他们就具有shell访问权限。这确实不能解决问题,而且很危险。