序章

多くの場合、日常的に複数のマシンを管理することは困難です。 セキュアシェル(SSH)はリモートアクセスに適していますが、プロトコル自体には、利便性とセキュリティの両方でいくつかの欠点があります。

たとえば、リモートマシンにアクセスするには、パブリックIPアドレスと転送ポートが必要です。これにより、リモートマシンは、インターネットまたは少なくとも大規模なネットワークに公開されます。 これは、公開鍵と秘密鍵のペアの代わりにパスワードを認証に使用する場合に特に関係します。 さらに、リモートマシンの公開鍵を事前に知らないと、「中間者」攻撃に対して脆弱になる可能性があります。 また、アクセスしたい多くのリモートマシンには、パブリックIPアドレスがないか、知らない動的IPアドレスがあります。

さらに、SSHはリモートセッションごとに1つの接続を必要とします。 ユーザーが数百または数千のマシンで単一のコマンドを実行する必要がある場合は、最初にTCPハンドシェイクを使用して各マシンへの接続を確立する必要がありますが、これは効率が低くなります。

NKN Shell 、またはnshは、リモートコマンドを実行するための便利で安全な方法を提供するSSHの代替手段です。 nshは、安全で分散化されたデータ伝送を提供するNKNのグローバルパブリックネットワークを利用します。 このアーキテクチャは、公開鍵インフラストラクチャ(PKI)を使用せずに、ルーティングとエンドツーエンド暗号化の両方に使用される公開鍵を含む一意のアドレスを使用します。 また、ネットワークでは、リモートサーバーがパブリックIPアドレスを持っている必要はありません。 リモートサーバーは、インターネットにアクセスでき、アウトバウンドHTTPおよびWebSocket接続を確立できる必要があるだけです。 その結果、リモートマシンはオープンインターネットに公開されません。

このチュートリアルでは、NKNシェルデーモンおよびNKNシェルクライアントXtermアプリケーションを使用して、リモートマシンでコマンドを実行します。 これを行うには、インターネットにアクセスできるリモートマシンにNKN Shellデーモンをインストールして構成し、キーペアを生成して、クライアントから接続します。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • Ubuntu18.04初期サーバーセットアップガイドに従ってセットアップされた1つのUbuntu18.04サーバー。これには、ルート以外のsudo対応ユーザーとファイアウォールが含まれます。
  • ローカルマシンにインストールされているWebブラウザ。

ステップ1—リモートサーバーへのNKNシェルデーモンのインストール

まず、サーバーにNKNシェルデーモン(nsd)をインストールします。 このアプリケーションはnkn-multiclientを呼び出し、NKNのパブリックネットワークに接続してルーティング用のアドレスを取得します。 次に、デーモンは、認証およびホワイトリストに登録されたクライアントからの着信シェルコマンドをリッスンし、それらのコマンドを実行して、結果を送り返します。

GitHubから最新のビルド済みnshdバイナリをダウンロードすることから始めます。

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

ファイルを解凍します。

  1. tar -zxvf linux-amd64.tar.gz

次に、ファイルを/usr/local/binディレクトリに移動して、システム全体で使用できるようにします。

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

次に、Systemdを使用してデーモンプロセスとして実行するようにこれを構成し、サーバーがリセットされた場合に再起動するようにします。

/etc/systemd/systemnshd.serviceというファイルを作成します。

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

次のサービス定義をファイルに追加して、サービスを構成します。

/etc/systemd/system/nshd.service
[Unit]
Description=NKN Shell Daemon
After=network.target

[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/usr/local/bin/nshd

[Install]
WantedBy=multi-user.target

Systemdユニットファイルの詳細については、Systemdユニットとユニットファイルについてを参照してください。

ファイルを保存して、エディターを終了します。 次に、次のコマンドを使用してnshdサービスを有効にして開始します。

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

次のコマンドを実行して、サービスがアクティブで開始されていることを確認します。

  1. sudo systemctl status nshd.service

ステータスがアクティブであることがわかります。

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

サーバーに接続するには、前のコマンドの出力にあるNKNアドレスを取得する必要があります。 次のコマンドを実行して、アドレスを取得することもできます。

  1. nshd addr

住所が表示されます。

Output
e70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383

サーバーに接続するために必要になるため、このアドレスをメモしてください。

デーモンが実行されてリッスンしているので、サーバーと通信するようにWebベースのクライアントを構成できます。

ステップ2—NKNシェルクライアントのアクセス許可を構成する

リモートマシンに接続できる互換性のあるクライアントが必要です。 このチュートリアルでは、WebベースのNKNシェルクライアントであるNKNシェルクライアントXtermを使用します。 それを実行するいくつかの異なる方法があります:

  • https://nsh.nkn.org/でホストされているバージョンを使用してください。 このWebページはサーバーでホストされていますが、実際にはブラウザーで実行される純粋なローカルWebアプリであることに注意してください。
  • ソースコードを入手して、自分でホストしてください。
  • nShellChrome拡張機能を使用してください。

このチュートリアルでは、ホストされているバージョンを使用します。 ローカルマシンで、Webブラウザーを開き、https://nsh.nkn.orgに移動します。 ウェルカム画面が表示されます。

The Shell Client

[新しいキーペアの生成]をクリックします。 次の画像に示すように、キーが生成されて表示されます。

The generated key pair

:新しいキーペアを生成すると、シークレットシードが表示されます。 SSH秘密鍵の場合と同じように、この秘密シードを安全に保管してください。 この秘密シードを持っている人は誰でも、それを使用して公開鍵を再生成し、リモートマシンでコマンドを実行できます。 ブラウザはこのシードを記憶しますが、新しいマシンで再び使用できるように、安全な場所にコピーする必要があります。

シークレットシードを安全な場所に保存します。 後でそれを使用して公開鍵を再生成し、別のクライアントマシンから接続できるようにすることができます。

これは新しいキーペアであるため、サーバー上のファイル/etc/nshd/authorized_pubkeys公開キーを追加する必要があります。

/etc/nshd/authorized_pubkeysは、どのSSH公開鍵がログインできるかを制御する~/authorized_keysファイルと同様の役割を果たします。 authorized_pubkeysファイルは、どのユーザーがキーに関連付けられているかを指定できます。 セキュリティ上の理由から、このチュートリアルではroot以外のユーザーを使用してログインする必要があるため、生成された公開鍵を、このチュートリアルの初期サーバーセットアップガイドで作成したsammyユーザーに関連付けます。記事の前提条件。

ユーザーを公開鍵に関連付けるには、このユーザーのユーザーID(UID)とグループID(GID)を取得する必要があります。 sammy ユーザーとしてログインしているときに、サーバーで次のコマンドを実行します。

  1. id

ユーザーのUIDとGIDが表示されます。

Output
uid=1000(sammy) gid=1000(sammy) groups=1000(sammy),27(sudo)

次に、エディターでauthorized_pubkeysファイルを開きます。

  1. sudo nano /etc/nshd/authorized_pubkeys

公開鍵、uid、およびgidをスペースで区切って含む1行を追加します。

authorized_pubkeys
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

ファイルを保存します。

ファイルに正しい内容が含まれていることを確認します。

  1. cat /etc/nshd/authorized_pubkeys

画面にキーが印刷されます。

Output
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

次に、nshdデーモンを再起動して、変更を適用します。

  1. sudo systemctl restart nshd.service

それでは、サーバーに接続してコマンドを実行してテストしてみましょう。

ステップ3—リモートマシンにコマンドを送信して応答を受信する

NKN Shell Clientで、手順1のリモートnshdアドレスと、オプションのクライアント識別子を入力します。

The nsh website with remote address filled in

接続をクリックして接続を開始します。

リモートマシンに接続され、ブラウザ内にターミナルプロンプトが表示されます。 ここから、SSHと同じように使用できます。 たとえば、次のコマンドを実行して、/etc/nshdディレクトリに切り替えます。

  1. cd /etc/nshd

次に、その内容を一覧表示します。

  1. ls

ディレクトリの内容が表示されます。

Output
authorized_pubkeys wallet.json wallet.pswd

exitと入力すると切断できます。 再接続する必要がある場合は、Webインターフェイスに再度アクセスして、接続の詳細を入力します。 新しい鍵ペアを生成する場合は、サーバーに新しい公開鍵を追加する必要があります。

結論

このチュートリアルでは、リモートマシンにコマンドを安全かつ便利に送信するようにnshをインストールして構成しました。 nshは、コマンドをすばやく実行してサービスの最新のステータスを取得したり、いくつかの構成設定を確認したりする必要がある場合に、リモートマシンにアクセスするための優れた方法です。 このアプリケーションは、NKNのグローバルパブリックネットワークに基づいており、無料で使用できるため、今日、独自のアプリケーションやワークフローに組み込むことができます。

SSHまたはその他のTCPベースのアプリケーションをサポートするnkn-tunnelを探索することもできます。