使用秘密公共(客户端)ssl 证书通过 stunnel 进行 SSH

nix*_*win 0 ssl ssh ssh-tunnel stunnel

我处于一种情况,我无法对 ssh 进行无密码登录,并且 ssh 服务器无法通过默认端口以外的任何其他端口运行。所以,我选择使用 stunnel 来隧道 ssh。就我个人的电脑我使用在客户端模式,安全通道,并用它来登录到服务器,像这样:ssh -p 8888 user@localhost。问题是 ssl 客户端证书是公开的,因此任何人都可以轻松设置到我的服务器的 ssl 隧道。如果有人查询https://myserver.com它表明 openssh 2.0 正在 ssl 端口上运行。所以它已经成为一种最简单的入侵方式,比在非默认端口上运行 ssl 服务器要简单得多。所以,我想知道是否可以将 ssl 客户端证书设为私有,这样就不会向在我的服务器上进行 https 查询的任何人提供它。而且我应该能够像 ssl 私钥一样保密。

Ins*_*yte 6

所以澄清一下:您希望允许来自办公网络的密码,而不是来自其他任何地方的密码。但是,您需要能够从任何地方进行连接。

在我的网络上,从外部登录时需要 SSH 密钥,但从内部的另一台主机连接时,可以使用密钥或密码。

这是它的工作原理:

/etc/ssh/sshd_config

RSAAuthentication yes
PasswordAuthentication no

Match Address 192.168.0.*
    PasswordAuthentication yes
Run Code Online (Sandbox Code Playgroud)

如果您将办公室子网替换为 192.168.0.*,用户将能够使用密码进行连接,但只能从办公室子网进行连接。但是,您将能够使用 SSH 密钥对从任何地方进行连接。

当 ssh 客户端连接到服务器时,它会显示一个可以尝试的身份验证机制列表。通常该列表是“公钥,密码”。在这种情况下,当有人从外部连接时,他们只会看到“公钥”,因此他们的客户端甚至不会尝试发送密码。如果他们尝试使用 SSH 公钥以外的任何机制进行身份验证,则服务器会立即关闭连接。所以不存在暴力破解密码的可能性。