首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用具有静态IP地址的第三台计算机连接到带有SSH隧道的路由器后面的机器有多安全?

问使用具有静态IP地址的第三台计算机连接到带有SSH隧道的路由器后面的机器有多安全?
EN

Security用户
提问于 2020-04-10 04:09:48
回答 1查看 1.3K关注 0票数 0

我找到了一篇描述如何访问带有SSH隧道的家庭路由器后面的Linux机器的文章。https://juliansimioni.com/blog/howto-access-a-linux-machine-behind-a-home-router-with-ssh-tunnels/

这样的设置有多安全?我不是专家,所以不确定是否有什么陷阱。

我的用例几乎与作者相同:

  • Ubuntu桌面,我需要连接到。桌面在WiFi路由器后面。外部IP是动态的。
  • 我需要连接的Linux笔记本电脑。
  • 由于动态IP地址,我需要设置所有的东西一次。
  • 我可以在云中获得具有静态IP地址的Linux。

如果我采用该解决方案,是否可以在这种设置中使用公钥而不是密码身份验证?

EN

回答 1

Security用户

回答已采纳

发布于 2020-04-10 15:52:11

该建议打开了一个反向隧道端口从NAT'd系统(您的局域网上的最终目的地SSH服务器)到世界。它很笨重;如果您想要这样的东西,只需设置端口转发从您的路由器。

“适当的”SSH解决方案将是在您面向公共的系统(路由器)上接受SSH连接,并将其用作跳入网络的主机。然后,您就像路由器的SSH加上NAT系统的SSH一样安全(端口转发和反向隧道解决方案对路由器的安全性为零,并且完全依赖于NAT系统的安全性)。

在您在路由器上设置了向世界开放的ssh之后(顺便说一句,它不应该允许root登录,或者至少不允许没有键),您可以这样连接:

代码语言:javascript
复制
ssh -J username@my-router me@lan-system

这将作为username连接到路由器,然后立即以用户me的身份转发到lan系统的连接。(指定用户是可选的,它将默认为本地用户名。)这都是从本地客户端的角度来执行的,所以如果您使用SSH密钥(您请求的--而且您应该这样做),私钥都在您的本地系统上,而不是跳转框(路由器)上。

这个SSH跳主机指南有一些很好的例子,包括如何使用您的~/.ssh/config使其自动化(因此您可以输入ssh lan-system )。

设置基于密钥的身份验证

在本地客户端my-laptop上,创建一个键 (如果ed25519不受支持,请创建ed25519密钥,请参见该链接):

代码语言:javascript
复制
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):

代码语言:javascript
复制
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代理,所以让我们尝试一下:

代码语言:javascript
复制
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$ 

如果成功了,你就可以走了。如果没有,您需要启动一个代理:

代码语言:javascript
复制
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。这看起来应该很眼熟:

代码语言:javascript
复制
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文件来缩短此命令行:

代码语言:javascript
复制
Host lan-system
  ProxyJump username@my-router
  UserName me

这将允许您独立运行ssh lan-system。如果您具有相同的用户名,则无需使用UserName行。对于username@行的ProxyJump部分也是如此。

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/229560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档