保护 SSH 隧道

保护 SSH 隧道

我们有一个使用 SSH 连接到服务器的应用程序:应用程序的网络流量(数据库、一些自定义 TCP 协议等)通过 SSH 连接进行隧道传输。

我们在服务器上使用密钥对和非特权帐户,但用户仍然可以使用他们的密钥登录服务器,或者执行他们想要的任何端口重定向。

有没有办法配置 SSH 服务器以仅允许一些隧道(限制隧道的终止地址和端口),并禁用 shell 访问?(我们使用 OpenSSH)

[编辑]

我碰到本文,看来删除 shell 访问权限还不够。相应地更改了标题和描述。

答案1

在您的 authorized_keys 文件中,您可以指定登录时将运行哪个命令。您可以简单地将该命令设置为运行一些将等待很长时间的命令。sshd man作为您可以在 authorized_keys 文件中使用的所有选项的列表。

permitopen="tsserver.example.org:3389",no-pty,no-agent-forwarding,no-X11-forwarding,command="/usr/local/stm_shell.sh" ssh-rsa AAAAB3....

我的 stm_shell.sh 是这样的(它还强制执行 12 小时超时)。我不能 100% 确定这是否完全安全。

#!/bin/bash

# send a hang-up after this process exits
shopt -s huponexit
# maximum session length in hours
CONNECT_TIME=12
sleep $[CONNECT_TIME*60]
kill $PPID

答案2

将用户的 shell 设置为 /bin/false 可能会实现您想要的效果。

答案3

也许 sshd_config(man sshd_config)中的“ChrootDirectory”关键字可能会提供更多的额外安全性。

答案4

我相信您可以设置ForceCommand指令来/bin/false阻止 shell 访问。

相关内容