我处于无法无密码登录 ssh 的情况,并且 ssh 服务器无法在默认端口以外的任何其他端口上运行。所以,我选择使用 stunnel 来建立 ssh 隧道。在我的个人电脑上,我在客户端模式下使用 stunnel,并使用它来登录服务器,如下所示:ssh -p 8888 user@localhost
。问题是 ssl 客户端证书是公开的,因此任何人都可以轻松地设置到我的服务器的 ssl 隧道。如果有人查询https://myserver.com
它,则显示 openssh 2.0 正在 ssl 端口上运行。因此,这已成为一种最简单的入侵方式,比在非默认端口上运行 ssl 服务器简单得多。所以,我想知道是否可以将 ssl 客户端证书设为私有,这样就不会提供给在我的服务器上执行 https 查询的任何人。并且我应该能够像 ssl 私钥一样保密它。
答案1
因此需要澄清的是:您希望允许从办公网络输入密码,但不允许从其他任何地方输入密码。但是,您需要能够从任何地方进行连接。
在我的网络上,从外部登录时需要 SSH 密钥,但从内部的另一台主机连接时可以使用密钥或密码。
工作原理如下:
/etc/ssh/sshd_config
RSAAuthentication yes
PasswordAuthentication no
Match Address 192.168.0.*
PasswordAuthentication yes
如果您将办公室子网替换为 192.168.0.*,用户将能够使用密码进行连接,但只能从办公室子网进行连接。但是,您将能够使用 SSH 密钥对从任何地方进行连接。
当 ssh 客户端连接到服务器时,它会收到一个可以尝试的身份验证机制列表。通常,列表为“公钥,密码”。在这种情况下,当有人从外部连接时,他们只会看到“公钥”,因此他们的客户端甚至不会尝试发送密码。如果他们尝试使用 SSH 公钥以外的任何机制进行身份验证,服务器会立即关闭连接。因此,不可能通过暴力破解获得密码。
答案2
Nixnotwin,这确实是个问题,但我完全搞不懂你认为你的要求会对你有什么帮助。让我重述一下这个问题,这样我们就能知道我是否理解正确了。
您有一个 ssh 服务器,其中有很多弱用户密码。您希望能够从异地远程登录,但又不想让愚蠢的用户这样做,因为这会使所有这些弱用户密码暴露在暴力密码猜测之下,而这种猜测总是针对不受保护的sshd
服务器进行。如果您要运行sshd
,它必须在端口 22 上运行。
我目前做得如何?
显然,您在这台服务器上有两个 NIC,因此有两个地址,因为您指的是“面向 LAN 的接口”和“WAN 端”。设置两个sshd
都在端口 22 上运行的 s 怎么样?其中一个仅绑定到内部 NIC 地址 ( ListenAddress 10.3.4.5
),其他方面不受限制,供所有无法选择好密码的本地用户使用。第二个sshd
使用不同的配置文件,它仅绑定到外部接口上的端口 22 ( ListenAddress 2.3.4.5
),并且不允许基于密码的身份验证 ( PasswordAuthentication no
),或者只允许属于某个组的用户登录 ( AllowGroups nixnotwin
)?
其中任何一个都能解决您的问题吗?