通过SSH隧道传输网络流量时,可以禁用交互式Shell访问吗?


12

我正在考虑将SSH隧道实现为一种廉价的VPN解决方案,供外部用户访问仅面向Intranet的Web应用程序。

我目前正在使用安装了OpenSSH的Ubuntu Server 10.04.1 64位。

我正在Windows框上使用Putty在本地端口上创建到ssh服务器的隧道。

start putty -D 9999 mysshserver.com -N

然后,我使用告诉Firefox在localhost:9999上使用SOCKS代理。

-N标志将从客户端禁用交互式外壳程序。有没有办法在服务器端执行此操作?

除了禁用根访问,还使用rsa密钥身份验证和更改默认端口;为此,我还有其他明显的安全措施吗?我的目标是仅能够隧穿网络流量。

Answers:


15

四年后,这个答案值得更新。虽然最初我是用authorized_keys自己的,在某些情况下可能仍会使用它,但是您也可以使用中央sshd_config服务器配置文件。

sshd_config

您可以(针对您的特定用例)指定一个组,例如proxy-onlyMatch单个用户。在中sshd_config。这是在全局设置并撤消,重复或优化全局设置中提供的某些设置之后完成的。

注意:sshd_config(5)man页面中记录了其中使用的某些语法/指令ssh_config(5)。特别要确保阅读的“ 模式”部分ssh_config(5)

对于一个组,这意味着您的Match阻止将开始如下:

Match group proxy-only

您可以Match在以下标准:UserGroupHostLocalAddressLocalPortAddress。要匹配多个条件,只需用逗号分隔条件-模式对(group proxy-only如上)。

在这样的块内(为了简洁起见,通常会对其进行缩进(但不必这样做)),然后您可以声明要应用于用户组的设置,而不必编辑authorized_keys该组成员的每个文件。

no-pty来自的设置authorized_keys将被设置反映,PermitTTY nocommand="/sbin/nologin"变为ForceCommand /sbin/nologin

此外,您还可以设置更多设置来满足管理员的偏执狂,例如- chroot将用户引导到其主文件夹中,并最终得到如下所示:

Match group proxy-only
    PermitTTY no
    ForceCommand /sbin/nologin
    ChrootDirectory %h
    # Optionally enable these by un-commenting the needed line
    # AllowTcpForwarding no
    # GatewayPorts yes
    # KbdInteractiveAuthentication no
    # PasswordAuthentication no
    # PubkeyAuthentication yes
    # PermitRootLogin no

(检查自己是否需要或是否需要注释掉的行和注释)

%h是用户的主目录取代(令牌%u将产生的用户名和%%百分号)。我发现ChrootDirectory限制sftp-only用户范围特别有用:

Match group sftp-only
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp
    PasswordAuthentication no

请注意,在块中只能使用某些指令Match。查阅man页面sshd_config(5)以获取详细信息(搜索Match)。

授权密钥

注意:这句话下面的部分是我的原始答案。同时-但它也取决于您确切sshd版本的功能-在大多数情况下,我会采用上述方法。

是的,可以,您可以分配公钥。除了ajdecon推荐的nologin之外,我建议在以下项的键条目之前设置以下内容authorized_keys

no-pty ssh-rsa ...

no pty告诉服务器端,不应为该密钥分配任何伪终端。

您还可以通过以下方式强制执行特定密钥的nologin之类的操作:

command="/sbin/nologin",no-pty ssh-rsa ...

请注意,no-pty仅此一项并不能阻止密钥用户执行命令。参见superuser.com/q/1230979/195460
塔德·里斯皮

3

对于任何仅使用隧道的用户,请将其登录Shell更改为/ sbin / nologin。这样,您的用户将无法访问服务器上的Shell,但仍将能够从其客户端运行设置ssh隧道。


0

我知道这可能不是您要找的答案,但是您是否考虑过使用OpenVPN作为替代方案?


0

如果您准备放弃用户/通过身份验证并使用密钥登录,则可以为每个公共密钥指定参数 s。

值得注意的参数是:

command =“ command”

指定在此密钥用于身份验证时执行命令。用户提供的命令(如果有)将被忽略。

限制

启用所有限制,即禁用端口,代理和X11转发,以及禁用PTY分配和〜/ .ssh / rc的执行。

最后

port-forwarding 启用以前由limit选项禁用的端口转发。

有了这些,您几乎可以限制该特定密钥对的用户使用SSH会话可以执行的操作。

它看起来像这样:

restrict,port-forwarding,command="/sbin/nologin" ssh-rsa <base64-encoded key>

我看到我的回答对serverfault.com/a/242411/13364来说有些多余,但是由于“ restrict”和“ port-forwarding”参数,我认为它比“ no-pty”更好。
asdmin

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.