现在来点互联网乐观主义
嘘!没有端口
ssh no ports 提供了一种方式,可以在目标设备不开启任何外部端口(甚至22端口)的情况下,SSH到远程Linux主机/设备。所有的网络连接都是出站的,而且无需知道设备被分配的IP地址。只要设备有IP地址、DNS和互联网访问权限,您就能连接到它。
快速演示
有两个二进制文件:
sshnpd:运行在远程设备上的守护进程
sshnp:客户端,它建立到设备的连接,您可以通过本地主机接口SSH到该设备
要开始使用,您只需要二进制文件,或者使用dart运行它们,并提供两个@signs和.atKeys文件。一旦您拥有了@signs(atsign.com 提供免费或付费@signs),将二进制文件放在每个机器上,并将密钥放入~/.atsign/keys目录。您需要一个设备@sign和一个管理器@sign,但每个设备也可以使用--device参数拥有一个唯一的设备名称。
到位后,您可以先在远程设备上启动守护进程。请记住使用rc.local脚本或类似方法在启动时启动守护进程。
dart bin/ssh_control.dart --atsign <@your_devices_atsign> --manager <@your_manager_atsign> --device <iot_device_name> -u
启动后,您可以从另一台机器上运行客户端代码。
dart run bin/ssh_trigger.dart --from <@your_manager_atsign> --to <@your_devices_atsign> --host <example.com> -l --local-port --device <iot_device_name>
--host指定了客户端机器的openssh服务器的DNS名称,远程设备可以连接到该服务器。如果一切顺利,客户端将完成并告诉您如何连接到远程主机,例如。
ssh -p 2222 cconstab@localhost
运行此命令后,您将通过远程设备的反向SSH隧道连接到远程机器。这意味着您可以禁用SSH在所有接口上监听,而是让SSH仅在127.0.0.1上监听。
这可以通过编辑/etc/ssh/sshd.config轻松实现
#Port 22
#AddressFamily any
ListenAddress 127.0.0.1
#ListenAddress ::
并重新启动SSH守护进程。请确保您在启动和重启时启动sshnpd并进行检查。由于这是beta版代码,建议将守护进程包装在shell脚本中,或者让sysctld确保它正在运行。
在测试期间,我倾向于在TMUX中运行守护进程,这样可以轻松查看日志(-v)。
欢迎通过PR提出想法/bug/贡献!
这个工具有什么用?
系统管理员 网络管理员 物联网制造商 任何连接到不安全网络并运行SSH的人!
维护者
由The @ Company创建
原始代码库来自
