ssh隧道仅访问


31

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

Answers:


42

是的,仅用/bin/false作shell并指示用户在不执行任何远程命令(即-NOpenSSH 的标志)的情况下启动隧道SSH进程:

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

嗯,如果用户不使用-N,他们就具有shell访问权限。这确实不能解决问题,而且很危险。
mlissner's

12
@mlissner:不,如果您具有/bin/false外壳程序权限,那么您将没有外壳程序访问权限,因为每个登录会话都会立即终止。
斯文

10

在用户的.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”指定了端口转发,则该端口转发仍将有效。

无论如何,请尝试一下。


6
这是危险的建议 ; no-pty不会阻止shell访问,只是不会给shell带来麻烦。它不会显示提示(即“似乎挂起”),但是您仍然可以很好地发出命令。如果要从那里限制对Shell的访问,则需要中的command="..."选项.ssh/authorized_keys
Aleksi Torhamo

@AleksiTorhamo是正确的,但这是一个开始;您还必须将shell设置为/ etc / passwd中的/ usr / sbin / nologin或/ bin / false,以完全限制该shell。我对以上条目进行了编辑,以反映这一点,以及Aleksi的建议。
杰米森·贝克尔

4

给用户一个仅允许他们注销的外壳,例如 /bin/press_to_exit.sh

#!/ bin / bash
读取-n 1 -p“按任意键退出”键

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


3
我认为至少从理论上讲,用户将能够在适当的时候(在第1行和第2行之间)按CTRL + C,并获得完整的bash shell。
andreas-h

2

分配一个不允许用户登录的外壳。

例如

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

会阻止他们获得shell提示,并给他们60秒钟的超时时间-如果60秒钟内没有活动的连接,它将退出并因此完全断开它们(根据要求增加数量)。

他们也不能执行远程命令,因为该Shell不会允许他们。


4
大多数Linux安装已经为此提供了一些东西。/ sbin / nologin或/ bin / false或类似名称。
罗里

1
在上面的示例中,Ctrl-C会做什么?
Arjan

Arjan:由于该脚本用作外壳程序,因此Ctrl-C与普通脚本具有与“ logout” 相同的效果。
grawity

2
我实际上喜欢Earl的响应,带有“ -N”选项,但是如果您想给您的用户一个有用的,友好的,信息丰富的消息-并阻止他们到处放置SSH连接-那么自定义脚本就很好而且很清楚它在做什么。
jrg

2
@jrg这个讨论是古老的,您可能已经改变主意了:)但是恕我直言,手工制作外壳脚本很危险。已经存在 /sbin/nologin,您可以使用中的用户友好消息对其进行自定义/etc/nologin.txt
dr01

0

我的解决方案是为仅提供隧道服务的用户(而不提供交互式shell)将/ etc / passwd中的该shell设置为/ usr / bin / tunnel_shell

只需使用无限循环创建可执行文件/ usr / bin / tunnel_shell即可

另外,使用AllowGroupsMatch Group选项。

此处有完整说明: http //blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/


2
用户可能能够以某种方式退出可执行文件并转义外壳。您是否完全确定您的可执行文件不允许这样做?
dr01

2
@ dr01老实说,我不确定这是否100%安全。我想当您退出可执行文件时,SSH会话也会退出。我将对此进行更多研究,并可能在此处再次发表评论。
Daniel W.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.