保护SSH隧道

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

我们在服务器上使用密钥对和非特权帐户,但用户仍然可以使用他们的密钥login到服务器,或者进行他们想要的任何端口redirect。

有没有办法configurationSSH服务器只允许一些隧道(限制隧道的结束地址和端口),并禁用shell访问? (我们使用OpenSSH)

[编辑]

我碰到这篇文章 ,似乎删除shell访问是不够的。 相应地更改标题和说明。

在您的authorized_keys文件中,您可以指定在login时将运行哪个命令。 你可以简单地设置这个命令来运行一些将等待很长时间的东西。 sshd手册页列出了您可以在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 

将用户的shell设置为/ bin / false可以做你正在寻找的东西。

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

我相信你可以设置ForceCommand指令为/bin/false来防止shell访问。