如何在 Ubuntu 18.04 上使用 nsh 运行安全的远程命令

介绍

虽然安全壳(SSH)是远程访问的良好选择,但协议本身在方便性和安全性方面有一些缺点。

例如,远程机器需要有一个公共 IP 地址和一个转发端口才能访问它们,这将使它们暴露在互联网上,或者至少在更大的网络上。这尤其适用于如果您使用密码进行身份验证而不是公共和私钥对。

如果用户需要在数以百计甚至数以千计的机器上运行单个命令,他们必须先通过TCP握手与每个机器建立连接,这不那么高效。

NKN Shell,或nsh,是SSH的替代品,提供了一个方便和安全的方式来运行远程命令。nsh利用NNKN的全球公共网络(https://thedailychain.com/nkn-the-primer/)提供安全和分散的数据传输。该架构使用包含公共密钥的唯一地址,用于路由和端到端加密,而无需任何公共密钥基础设施(PKI)。

在本教程中,您将使用 NKN shell daemonNKN Shell Client Xterm应用程序在远程机器上执行命令。

前提条件

要遵循本教程,您将需要以下内容:

步骤 1 — 在远程服务器上安装 NKN Shell Daemon

首先,在您的服务器上安装 NKN shell daemon (nsd) 这个应用程序将召唤 nkn-multiclient,该应用程序将连接到 NKN 的公共网络并获得路由的地址。

开始下载最新的 从 GitHub 预先构建的 nshd 二进制:

1wget https://github.com/nknorg/nkn-shell-daemon/releases/latest/download/linux-amd64.tar.gz

解压文件:

1tar -zxvf linux-amd64.tar.gz

然后将文件移动到 /usr/local/bin 目录,以便它们在系统范围内可用:

1sudo mv ./linux-amd64/* /usr/local/bin/

接下来,您将将此配置为使用 Systemd 作为一个 DAEMON 流程运行,以便在重新设置服务器时重新启动。

/etc/systemd/system中创建一个名为nshd.service的文件:

1sudo nano /etc/systemd/system/nshd.service

将以下服务定义添加到文件中来配置该服务:

 1[label /etc/systemd/system/nshd.service]
 2[Unit]
 3Description=NKN Shell Daemon
 4After=network.target
 5
 6[Service]
 7Type=simple
 8User=root
 9Group=root
10Restart=always
11ExecStart=/usr/local/bin/nshd
12
13[Install]
14WantedBy=multi-user.target

了解有关 Systemd 单元文件的更多信息,请参阅 理解 Systemd 单元和单元文件

保存文件并离开编辑器,然后使用以下命令启用并启动nshd服务:

1sudo systemctl enable nshd.service
2sudo systemctl start nshd.service

运行以下命令以确保服务已启动并启动:

1sudo systemctl status nshd.service

你会看到状态是活跃的:

 1[secondary_label Output]
 2 nshd.service - NKN Shell Daemon
 3   Loaded: loaded (/etc/systemd/system/nshd.service; enabled; vendor preset: enabled)
 4   Active: active (running) since Wed 2020-02-19 19:16:02 UTC; 7s ago
 5 Main PID: 3457 (nshd)
 6    Tasks: 10 (limit: 1152)
 7   CGroup: /system.slice/nshd.service
 8           └─3457 /usr/local/bin/nshd
 9
10Feb 19 19:16:02 your_hostname systemd[1]: Started NKN Shell Daemon.
11Feb 19 19:16:03 your_hostname nshd[3457]: Create directory /etc/nshd/
12Feb 19 19:16:03 your_hostname nshd[3457]: Create password and save to file /etc/nshd/wallet.pswd
13Feb 19 19:16:03 your_hostname nshd[3457]: Create wallet and save to file /etc/nshd/wallet.json
14Feb 19 19:16:03 your_hostname nshd[3457]: Create authorized pubkeys file /etc/nshd/authorized_pubkeys
15Feb 19 19:16:03 your_hostname nshd[3457]: Listening at d46567b883a3070ee3fe879d9fa2d5dc55a95f79ff2797c42df36c6979e5c4Aba

为了连接到您的服务器,您需要获取其NKN地址,您可以在上一个命令的输出中找到它。

1nshd addr

你会看到你的地址出现:

1[secondary_label Output]
2e70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383

记住这个地址,因为你需要它来连接到你的服务器。

现在,戴蒙正在运行并聆听,您可以配置基于Web的客户端与服务器交谈。

步骤 2 — 配置 NKN Shell 客户端的权限

您需要一个可以连接到远程机器的兼容客户端. 在本教程中,您将使用基于网络的NKN shell客户端Xterm。

  • 使用托管版本在 https://nsh.nkn.org/. 请注意,虽然这个网页是在服务器上托管的,但它实际上是一个纯粹的本地Web应用程序,在您的浏览器中运行。

在本教程中,您将使用主机版本. 在本地机器上,打开您的网页浏览器并导航到 https://nsh.nkn.org. 你会看到一个欢迎屏幕:

The Shell Client

点击 ** 生成新密钥对**. 您的密钥将生成并显示如下图像所示:

The generated key pair

<$>[注意] 注意:当你生成一个新的密钥对时,你会看到一个 秘密种子. 保持这个秘密种子安全和安全,就像你用你的SSH私钥一样。

秘密种子保存到安全的地方,您可以稍后使用它来再生您的公共密钥,以便您可以从不同的客户端计算机连接。

由于这是一个新的密钥对,您必须在您的服务器上添加公共密钥到文件 /etc/nshd/authorized_pubkeys

/etc/nshd/authorized_pubkeys 具有与 ~/authorized_keys 文件类似的作用,该文件控制哪些 SSH 公共密钥可以登录. authorized_pubkeys 文件可以指定哪些用户与密钥相关联。

要将用户与公共密钥相关联,您需要获取该用户的用户ID(UID)和组ID(GID)。

1id

您将看到用户的 UID 和 GID:

1[secondary_label Output]
2uid=1000(sammy) gid=1000(sammy) groups=1000(sammy),27(sudo)

现在在您的编辑器中打开autorized_pubkeys文件:

1sudo nano /etc/nshd/authorized_pubkeys

添加一个包含公共密钥、uid 和 gid 的单行,以空格分开:

1[label authorized_pubkeys]
25d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

保存檔案

检查文件是否包含正确的内容:

1cat /etc/nshd/authorized_pubkeys

你会看到你的密钥打印在屏幕上:

1[secondary_label Output]
25d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

然后重新启动nshd大门来应用这些更改:

1sudo systemctl restart nshd.service

现在让我们通过连接到服务器并运行命令来测试它。

步骤 3 – 将命令发送到远程机器并收到回复

在 NKN Shell 客户端中,从步骤 1 输入您的远程nshd地址,以及可选的客户端标识符:

The nsh website with remote address filled in

点击连接来启动连接。

您将连接到您的远程机器,并在浏览器中显示一个终端提示. 从这里您可以像SSH一样使用它. 例如,执行以下命令来切换到 /etc/nshd目录:

1cd /etc/nshd

然后列出其内容:

1ls

你会看到目录的内容:

1[secondary_label Output]
2authorized_pubkeys wallet.json wallet.pswd

您可以通过键入退出来断开连接。当您需要重新连接时,请重新访问 Web 界面并输入您的连接详细信息。如果您生成一个新密钥对,则需要将新的公共密钥添加到您的服务器中。

结论

在本教程中,您安装并配置了 nsh 以安全且方便地将命令发送到远程机器. nsh 是访问远程机器的绝佳方法,当您需要快速运行命令以获得服务的最新状态或在某些配置设置中观察。

您还可以探索支持 SSH 或任何其他基于 TCP 的应用程序的 nkn-tunnel

Published At
Categories with 技术
comments powered by Disqus