我可以禁用交互式shell访问,而通过SSH隧道的networkingstream量?

我正在考虑实施SSH隧道作为一个便宜的VPN解决scheme,让外部用户访问仅面向Intranet的Web应用程序。

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

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

start putty -D 9999 mysshserver.com -N 

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

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

除了禁用根访问,使用rsa密钥身份validation,以及更改默认端口; 还有其他明显的安全措施吗? 我的目标是简单地能够隧道的networkingstream量。

四年后,这个答案值得更新。 虽然最初我自己使用了authorized_keys ,并且可能还会在一些select的情况下使用它,但您也可以使用中央的sshd_config服务器configuration文件。

sshd_config中

您可以指定(针对您的特定用例)一个组,例如proxy-onlyMatch个人用户。 在sshd_config 。 这是在全局设置完成后撤销,重复或改进全局设置中给定的一些设置。

注意: sshd_config(5)中使用的一些语法/指令logging在ssh_config(5)man页中。 特别要确保阅读ssh_config(5)PATTERNNS部分。

对于一个组来说,这意味着你的Match块将会像这样开始:

 Match group proxy-only 

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

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

来自authorized_keysno-pty设置将由PermitTTY no设置镜像, command="/sbin/nologin"将成为ForceCommand /sbin/nologin

另外,你也可以设置更多的设置来满足pipe理员的偏执狂,比如将用户chroot到他的home文件夹,最终会有这样的结果:

 Match group proxy-only # AllowTcpForwarding no ChrootDirectory %h ForceCommand /sbin/nologin # GatewayPorts yes # KbdInteractiveAuthentication no # PasswordAuthentication no # PubkeyAuthentication yes # PermitRootLogin no PermitTTY no 

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

%h是一个由用户的hoe目录replace的标记( %u会产生用户名, %%是百分号)。 我发现ChrootDirectory特别有用来限制我的sftp-only用户:

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

请注意,只有某些指令可用于Match块。 有关详细信息,请参阅mansshd_config(5) (searchMatch )。

authorized_keys中

注意:这句话下面的部分是我原来的答案。 同时 – 但它也取决于你的确切的sshd版本的function – 我会去大多数情况下上述的方法。

是的,你可以,因为你可以分配公钥的细粒度。 除了ajdecon推荐的nologin之外,我还build议在authorized_keys中的关键条目前面设置以下内容:

 no-pty ssh-rsa ... 

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

你也可以强制执行像nologin这样的特定键,方法是:

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

对于任何仅使用隧道的用户,请将其loginshell更改为/ sbin / nologin。 这样你的用户将无法访问服务器上的shell,但仍然能够运行从他们的客户端设置SSH通道。

我build议尝试Tunnelier 。 configuration/pipe理起来要简单得多。

我知道这可能不是你正在寻找的答案,但你有没有考虑使用OpenVPN作为替代?