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

CT.*_*CT. 14 security ssh shell proxy socks

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

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

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

start putty -D 9999 mysshserver.com -N
Run Code Online (Sandbox Code Playgroud)

然后我使用 tell Firefox 在 localhost:9999 上使用 SOCKS 代理。

-N 标志将从客户端禁用交互式 shell。有没有办法在服务器端做到这一点?

除了禁用 root 访问,使用 rsa 密钥认证,并更改默认端口;为此,我还应该遵循任何其他明显的安全实践吗?我的目标是简单地能够隧道网络流量。

0xC*_*22L 19

四年后,这个答案值得更新。虽然最初我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
Run Code Online (Sandbox Code Playgroud)

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

在这样的块中,传统上为了简洁起见相应地缩进(但不需要),然后您可以声明要应用于用户组的设置,而无需编辑authorized_keys该组成员的每个文件。

no-pty从设置authorized_keys将由镜像PermitTTY no设置,command="/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
Run Code Online (Sandbox Code Playgroud)

(检查自己是否需要或想要注释掉的行并根据需要取消注释)

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

Match group sftp-only
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp
    PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)

请注意,块中只能使用某些指令Match。有关详细信息,请参阅man页面sshd_config(5)(搜索Match)。

授权密钥

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

是的,您可以,尽可能细粒度地分配公钥。除了 ajdecon 推荐的 nologin 之外,我建议在 中的关键条目前面设置以下内容authorized_keys

no-pty ssh-rsa ...
Run Code Online (Sandbox Code Playgroud)

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

您还可以通过预先添加以下内容来强制执行特定键的 nologin 之类的操作:

command="/sbin/nologin",no-pty ssh-rsa ...
Run Code Online (Sandbox Code Playgroud)

  • 请注意,单独的“no-pty”不会阻止密钥用户执行命令。请参阅 https://superuser.com/q/1230979/195460 。 (3认同)