我找到了一篇描述如何访问带有SSH隧道的家庭路由器后面的Linux机器的文章。https://juliansimioni.com/blog/howto-access-a-linux-machine-behind-a-home-router-with-ssh-tunnels/
这样的设置有多安全?我不是专家,所以不确定是否有什么陷阱。
我的用例几乎与作者相同:
如果我采用该解决方案,是否可以在这种设置中使用公钥而不是密码身份验证?
发布于 2020-04-10 15:52:11
该建议打开了一个反向隧道端口从NAT'd系统(您的局域网上的最终目的地SSH服务器)到世界。它很笨重;如果您想要这样的东西,只需设置端口转发从您的路由器。
“适当的”SSH解决方案将是在您面向公共的系统(路由器)上接受SSH连接,并将其用作跳入网络的主机。然后,您就像路由器的SSH加上NAT系统的SSH一样安全(端口转发和反向隧道解决方案对路由器的安全性为零,并且完全依赖于NAT系统的安全性)。
在您在路由器上设置了向世界开放的ssh之后(顺便说一句,它不应该允许root登录,或者至少不允许没有键),您可以这样连接:
ssh -J username@my-router me@lan-system这将作为username连接到路由器,然后立即以用户me的身份转发到lan系统的连接。(指定用户是可选的,它将默认为本地用户名。)这都是从本地客户端的角度来执行的,所以如果您使用SSH密钥(您请求的--而且您应该这样做),私钥都在您的本地系统上,而不是跳转框(路由器)上。
这个SSH跳主机指南有一些很好的例子,包括如何使用您的~/.ssh/config使其自动化(因此您可以输入ssh lan-system )。
在本地客户端my-laptop上,创建一个键 (如果ed25519不受支持,请创建ed25519密钥,请参见该链接):
me@my-laptop:/home/me$ ssh-keygen -t ed25519 -a 100确保上面有密码。稍后我们将使用ssh-agent保存密码。这将在默认情况下创建~/.ssh/id_ed25519 (您的私钥)和~/.ssh/id_ed25519.pub (您的公钥),这很好。如果您想要的是默认的-C "comment about your key"以外的东西,也可以使用username@host。
现在您可以将公钥复制到跳转框(my-router):
me@my-laptop:/home/me$ ssh username@my-router "mkdir -p .ssh; chmod 700 .ssh; cat >>.ssh/authorized_keys" <~/.ssh/id_ed25519.pub这应该是最后一次提示您输入路由器用户的密码。
这在路由器上运行三个命令。首先,它确保您有一个~/.ssh目录。然后,它确保其权限是正确的(700是drwx------)。最后,它将输入附加到授权密钥列表中。在此之后,我们将通过标准输入传递公钥(这就像传递一个球;您将球交给ssh,它会指示远程系统将其保存在指定的位置)。
您现在应该能够使用密钥登录,但是让我们先设置您的SSH代理。
您很有可能已经运行了SSH代理,所以让我们尝试一下:
me@my-laptop:/home/me$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /home/me/.ssh/id_ed25519: [your typing will be invisible]
Identity added: /home/me/.ssh/id_ed25519
me@my-laptop:/home/me$ 如果成功了,你就可以走了。如果没有,您需要启动一个代理:
me@my-laptop:/home/me$ ssh-add ~/.ssh/id_ed25519
Could not open a connection to your authentication agent.
me@my-laptop:/home/me$ eval `ssh-agent -s`
Agent pid 1234567
me@my-laptop:/home/me$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /home/me/.ssh/id_ed25519: [your typing will be invisible]
Identity added: /home/me/.ssh/id_ed25519
me@my-laptop:/home/me$ 您应该研究如何为您的整个桌面环境(而不是每个shell)执行此操作,但如果您愿意在打开的每个终端中运行eval `ssh-agent -s`而不是集中管理,则只需将ssh-add添加到您的~/.bashrc中即可。
您现在应该能够运行ssh username@my-router并使用代理的解锁密钥自动登录。
现在让我们连接到NAT的系统lan-system。这看起来应该很眼熟:
me@my-laptop:/home/me$ ssh -J username@my-router me@lan-system "mkdir -p .ssh; chmod 700 .ssh; cat >>.ssh/authorized_keys" <~/.ssh/id_ed25519.pub这将自动跳过my-router并为lan-system请求您的me密码,然后它将安装您的密钥。之后,您可以运行ssh -J username@my-router me@lan-system并与代理无缝登录。
最后,您可以通过将此节放入您的~/.ssh/config文件来缩短此命令行:
Host lan-system
ProxyJump username@my-router
UserName me这将允许您独立运行ssh lan-system。如果您具有相同的用户名,则无需使用UserName行。对于username@行的ProxyJump部分也是如此。
https://security.stackexchange.com/questions/229560
复制相似问题