访问 NAT 或代理后面的计算机

访问 NAT 或代理后面的计算机

我有一台通过双向卫星调制解调器连接的家用电脑。我无法从外面连接,所以经过一番研究,我找到了一个解决方案,即反向 ssh 隧道。但我对 ssh 有几个问题

我有一台服务器,我想建立反向连接,之后我可以使用端口转发,这样我就可以使用已建立的反向连接连接到家庭电脑。我的问题是,如果我创建一个公钥来建立家庭电脑和服务器之间的连接,之后是否可以使用密码而不是公钥从另一台电脑登录到该服务器?

我想编写一个脚本(cron job)来建立 ssh 连接,这样 30 分钟后它就会检查连接是否断开,如果断开了,它就会重新建立连接,我该如何检查 ssh 连接是否仍然打开?

答案1

SSH 可以配置为接受公钥和密码。我没有禁用我在 SSH 服务器上设置的冗长而艰巨的密码,以防丢失密钥文件。

如果您使用 ssh 客户端建立连接,则当连接终止时,它会退出。您可以在启动 ssh 客户端时存储其 PID,然后检查该 PID 是否正在运行,或者在ssh不退出脚本的情况下从脚本调用,并使用while(假设bash)设置无限循环,以便在ssh每次终止时反复调用。 init是专门为此设计的,因此您也可以研究一下。

答案2

我不确定我是否回答了你的问题,但我觉得你打算做的事情缺少了一块砖,所以我将添加缺失的环节,并冒着这不是你的问题的风险。

您想要做的事情可以通过 SSH 来实现,而且设置起来也不难,但首先我要声明一下:SSH 隧道在许多工作环境中都是非法的,可能会导致您被解雇,即使您的目的是通过数据/备份访问您自己的家庭服务器。

为了从公共网络(比如网吧(“笔记本电脑”)上的笔记本电脑)访问位于 ISP 的 NAT 后面的家中(“家”)的服务器,您可以执行以下操作。

首先,您需要运行一个可通过公共互联网(SSShub)访问的 SSH 服务器。

将“home”永久连接到“SSHhub”,并偏僻的将端口从“SSHhub”转发到您的“家庭”服务器。查看 autossh 以确保在您离开时连接仍然存在,并检查 sshd_config 手册页以确保远程转发正确。在您的家庭机器上,您启动

autossh -M 0 -Nf SOCKSUSER@SSHHUB -r 8022:localhost:22

这会将公共 SSHhub 服务器上的端口 8022 转发到您的主服务器 SSH 端口 22。

现在你正坐在网吧里,手里拿着笔记本电脑,当地的将某个不受限制的端口转发到端口 8022 上的 SSHhub(使用上述示例)。因此,在您的笔记本电脑上启动

autossh -M 0 -Nf SOCKSUSER@SSHHUB -l 8122:localhost:8022

配置完成后,您可以通过以下方式从笔记本电脑通过 SSH 连接到家用机器:

ssh SOCKSUSER@localhost -p 8122

ssh 会话从笔记本电脑上的 localhost:8122 转发到 SSHhub 上的 localhost:8022,然后从那里转发到家庭服务器上的 localhost:22。

系统会要求您输入账户密码。由于 SSHhub 的 .ssh/authorized_keys 文件中同时包含笔记本电脑和主服务器的公钥,因此这一切会给您带来一些麻烦。PasswordAuthentication no/etc/ssh/sshd_config 文件中的 应该没问题,因为您是从本地主机内部登录的,但请自行检查。您可能希望在调试时将其设置为 yes。

检查 autossh 手册页以了解该-M 0选项。这将通过加密隧道“ping”SSH 服务器,否则您必须使用该-M选项配置监控端口。-M 0要求您在 .ssh/config 文件中设置 ServerAlive 变量,如下所示

ServerAliveInterval 15
ServerAliveCountMax 2
TCPKeepAlive no

我认为您也可以将它们内联。

现在我可以回答你最初的问题了:是否可以在笔记本电脑/网吧机器上不使用 RSA 公钥的情况下登录到 NAT 后面的家用机器。答案是“是”(据我记得),在上述情况下,当您PasswordAuthentication yes在 SSHhub 上允许时,您可以从任何机器(具有可用的 SSH 客户端)连接到 SSHhub。

很晚了,而且可能是错误的答案,但我花了一些时间来弄清楚,我想其他人也对此感到疑惑。

答案3

没有回答您的确切问题,您可以使用 neorouter 之类的产品解决问题……真正易于设置并处理几乎任何防火墙配置。

相关内容