NKN Shell(nsh): 一种比SSH更安全,更方便的新型远程终端


作者:NKN CTO张逸伦

我每天都使用ssh,我很喜欢它,但我必须承认ssh在安全性和便利性方面并不理想。原因如下:

ssh的安全性取决于用户知道远程计算机的公钥这样一个假设。这是因为ssh使用IP地址进行数据传递和用到公钥做密钥交换。由于IP地址和公钥之间没有内在联系,因此需要一些先验知识或PKI(公钥基础结构)来防止中间人(MITM)攻击,否则中间人能够查看和修改您和远程计算机两端的所有通信。 HTTPS面临相同的问题,它通过预定义的受信任证书解决了该问题。但是对于ssh,要么您自己知道远程公钥,要么必须祈祷没有中间人在攻击您。第一次建立ssh连接时尤其如此,因为ssh无法检测到远程公钥的更改。

当我想登录到远程计算机时,SSH非常方便。但是,很多时候我只不过想在几个远程机器上只运行一条命令。从技术上讲,我可以使用ssh xxx cmd来仅运行一条命令,但是除非我为每台远程计算机使用一个单独的对话窗口,否则它会使命令记录变得很混乱。更不用说我还得等每一条命令所需要的TCP握手信令时间。

使用SSH不太安全且不太方便的另一点是,远程计算机需要可以通过IP和端口直接访问。通常,这意味着远程计算机需要具有公共IP地址,或者您需要设置端口转发。鉴于公共IPv4地址现在变得稀缺和昂贵的事实(例如,从2020年开始谷歌云Google Cloud将不再提供免费的外部公共IP地址),而IPv6仍有很长的路要走,这将成为一个更加严重的障碍。另外,将您的计算机暴露于公共网络会带来安全风险,尤其是如果使用密码(而不是私钥)对ssh进行安全验证时。

而NKN客户端可以很好地解决上述问题。 NKN客户端能够以纯粹的去中心化方式实现任意的端到端的数据传输。在NKN之前,如果发送方客户端(例如,移动应用程序)想要向接收方客户端发送一些数据,则该接收方需要是可公开访问的,这对于消费类应用程序基本上是不可行的,又或者发送方和接收方都需要连接到某些集中式服务器/平台,这又会带来额外的成本(建立中继服务器或为该服务付费)和安全漏洞(集中式服务器或第三方服务有可能暴露用户数据)。但是现在有了NKN客户端,发送者和接收者都可以在任何网络条件下保持私有连接状态,并且它们不需要任何集中式服务器或平台。数据将以纯去中心化的方式进行路由和传递,端到端加密,并且免费。这要归功于NKN公共区块链网络。

我们创建了一个简单的名为nkn-shell-daemon 的Node.js应用程序。它使用nkn-multiclient-js侦听端对端加密的消息,这些消息是从事先已经获得授权的地址或公共密钥(白名单列表)发送的。 然后,它将消息解析为shell命令,执行它们,然后从stdout或stderr发送回结果。 以上问题迎刃而解:

  • NKN客户端地址包含公钥,并且用于路由和加密,从而无需任何PKI即可进行端到端加密。
  • 远程计算机不需要具有公共IP地址或公共可访问性。 唯一的要求是它具有Internet访问权限,并且可以建立出站http和websocket连接。
  • 只要可以使用NKN客户端的任何软件,都可以使用nkn-shell-daemon运行命令。 例如,nkn-shell-daemon与[d-chat](http://gitlab.com/losnappas/d-chat)兼容,您可以使用d-chat Chrome / Firefox插件或我们支持d-chat的移动应用程序(开发中)在节点上运行命令。

dchat

当前版本的nkn-shell-daemon使用请求-响应模型,并且不支持流以便与d-chat兼容。 但是,可以通过提供更合适和更专业的前端接口来扩展此功能。nkn-shell-daemon最初是作为演示应用程序使用的,但我们立即意识到它更为实用的价值,并自此将其部署到我们自己的nCDN节点上。 很快,我们就使用nkn-shell-daemon进行节点管理,nCDN配置更新,状态监视等等。 我们相信它具有更大的潜力,欢迎您就NKN Sshell的新应用提出想法或建议、并进行讨论。

关于NKN

NKN是一个完全去中心化,基于网络传输量工作证明,可支持千万级规模节点共识的区块链系统。由NKN所构建的这样一个有经济模型所驱动,社区共建共享的新型点对点网络,为开发者提供了一个开放、便捷、高效和安全的网络连接传输平台。基于NKN开发的各种应用将给终端用户带来各种全新的网络体验。


主页: https://nkn.org
邮箱: [email protected]
论坛: https://forum.nkn.org
Telegram: https://t.me/nknorg
Twitter: https://twitter.com/NKN_ORG
Medium: https://medium.com/nknetwork
Discord: https://discord.gg/yVCWmkC