Nshを使用してUbuntu18.04で安全なリモートコマンドを実行する方法
序章
多くの場合、日常的に複数のマシンを管理することは困難です。 セキュアシェル(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バイナリをダウンロードすることから始めます。
wget https://github.com/nknorg/nkn-shell-daemon/releases/latest/download/linux-amd64.tar.gz
ファイルを解凍します。
tar -zxvf linux-amd64.tar.gz
次に、ファイルを/usr/local/bin
ディレクトリに移動して、システム全体で使用できるようにします。
sudo mv ./linux-amd64/* /usr/local/bin/
次に、Systemdを使用してデーモンプロセスとして実行するようにこれを構成し、サーバーがリセットされた場合に再起動するようにします。
/etc/systemd/system
にnshd.service
というファイルを作成します。
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
サービスを有効にして開始します。
sudo systemctl enable nshd.service sudo systemctl start nshd.service
次のコマンドを実行して、サービスがアクティブで開始されていることを確認します。
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アドレスを取得する必要があります。 次のコマンドを実行して、アドレスを取得することもできます。
nshd addr
住所が表示されます。
Outpute70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383
サーバーに接続するために必要になるため、このアドレスをメモしてください。
デーモンが実行されてリッスンしているので、サーバーと通信するようにWebベースのクライアントを構成できます。
ステップ2—NKNシェルクライアントのアクセス許可を構成する
リモートマシンに接続できる互換性のあるクライアントが必要です。 このチュートリアルでは、WebベースのNKNシェルクライアントであるNKNシェルクライアントXtermを使用します。 それを実行するいくつかの異なる方法があります:
- https://nsh.nkn.org/でホストされているバージョンを使用してください。 このWebページはサーバーでホストされていますが、実際にはブラウザーで実行される純粋なローカルWebアプリであることに注意してください。
- ソースコードを入手して、自分でホストしてください。
- nShellChrome拡張機能を使用してください。
このチュートリアルでは、ホストされているバージョンを使用します。 ローカルマシンで、Webブラウザーを開き、https://nsh.nkn.orgに移動します。 ウェルカム画面が表示されます。
[新しいキーペアの生成]をクリックします。 次の画像に示すように、キーが生成されて表示されます。
注:新しいキーペアを生成すると、シークレットシードが表示されます。 SSH秘密鍵の場合と同じように、このシークレットシードを安全に保管してください。 この秘密シードを持っている人は誰でも、それを使用して公開鍵を再生成し、リモートマシンでコマンドを実行できます。 ブラウザはこのシードを記憶しますが、新しいマシンで再び使用できるように、安全な場所にコピーする必要があります。
シークレットシードを安全な場所に保存します。 後でそれを使用して公開鍵を再生成し、別のクライアントマシンから接続できるようにすることができます。
これは新しいキーペアであるため、サーバー上のファイル/etc/nshd/authorized_pubkeys
に公開キーを追加する必要があります。
/etc/nshd/authorized_pubkeys
は、どのSSH公開鍵がログインできるかを制御する~/authorized_keys
ファイルと同様の役割を果たします。 authorized_pubkeys
ファイルは、どのユーザーがキーに関連付けられているかを指定できます。 セキュリティ上の理由から、このチュートリアルではroot以外のユーザーを使用してログインする必要があるため、生成された公開鍵を、このチュートリアルの初期サーバーセットアップガイドで作成したsammyユーザーに関連付けます。記事の前提条件。
ユーザーを公開鍵に関連付けるには、このユーザーのユーザーID(UID)とグループID(GID)を取得する必要があります。 sammy ユーザーとしてログインしているときに、サーバーで次のコマンドを実行します。
id
ユーザーのUIDとGIDが表示されます。
Outputuid=1000(sammy) gid=1000(sammy) groups=1000(sammy),27(sudo)
次に、エディターでauthorized_pubkeys
ファイルを開きます。
sudo nano /etc/nshd/authorized_pubkeys
公開鍵、uid、およびgidをスペースで区切って含む1行を追加します。
authorized_pubkeys
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000
ファイルを保存します。
ファイルに正しい内容が含まれていることを確認します。
cat /etc/nshd/authorized_pubkeys
画面にキーが印刷されます。
Output5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000
次に、nshd
デーモンを再起動して、変更を適用します。
sudo systemctl restart nshd.service
それでは、サーバーに接続してコマンドを実行してテストしてみましょう。
ステップ3—リモートマシンにコマンドを送信して応答を受信する
NKNシェルクライアントで、手順1のリモートnshd
アドレスと、オプションのクライアント識別子を入力します。
接続をクリックして接続を開始します。
リモートマシンに接続され、ブラウザ内にターミナルプロンプトが表示されます。 ここから、SSHと同じように使用できます。 たとえば、次のコマンドを実行して、/etc/nshd
ディレクトリに切り替えます。
cd /etc/nshd
次に、その内容を一覧表示します。
ls
ディレクトリの内容が表示されます。
Outputauthorized_pubkeys wallet.json wallet.pswd
exit
と入力すると切断できます。 再接続する必要がある場合は、Webインターフェイスに再度アクセスして、接続の詳細を入力します。 新しい鍵ペアを生成する場合は、サーバーに新しい公開鍵を追加する必要があります。
結論
このチュートリアルでは、リモートマシンにコマンドを安全かつ便利に送信するようにnshをインストールして構成しました。 nshは、コマンドをすばやく実行してサービスの最新のステータスを取得したり、いくつかの構成設定を確認したりする必要がある場合に、リモートマシンにアクセスするための優れた方法です。 このアプリケーションは、NKNのグローバルパブリックネットワークに基づいており、無料で使用できるため、今すぐ独自のアプリケーションやワークフローに組み込むことができます。
SSHまたはその他のTCPベースのアプリケーションをサポートするnkn-tunnelを探索することもできます。