|
Linuxの世界では、コマンドラインからリモートコンピュータを制御する最も一般的な方法は、Secure Shell(SSH)プロトコルです。SSHはLinux独自のプロトコルですが、Windowsの世界でもますます普及しています。OpenSSHを使ってWindowsを制御する方法を説明した公式のWindows SSHドキュメントさえあります。 この記事では、一般的なオープンソース ツール PuTTY を使用して、Windows から Fedora 33 Linux システムへの SSH 接続を確立する方法を説明します。 SSHを使用する方法SSHはクライアントサーバーモデルを採用しており、SSHクライアントがSSHサーバーへの接続を確立します。SSHサーバーは通常デーモンとして実行されるため、SSHDと呼ばれることがよくあります。SSHデーモンを搭載していないLinuxディストリビューションを見つけるのは困難です。Fedora 33では、SSHデーモンはインストールされていますが、有効化されていません。 SSHを使えば、仮想マシンとして実行されているか、ネットワーク上の物理デバイスとして実行されているかを問わず、ほぼすべてのLinuxマシンを制御できます。一般的なユースケースとしては、Raspberry Piなどのヘッドレス組み込みデバイスが挙げられます。また、SSHは他のネットワークサービスへのトンネルとしても使用できます。SSH接続は暗号化されるため、デフォルトで暗号化を提供しないプロトコルのトランスポート層としてSSHを使用できます。 この記事では、SSH を使用する 4 つの方法について説明します。1. Linux で SSH デーモンを構成する方法、2. リモート コンソール接続を設定する方法、3. ネットワーク経由でファイルをコピーする方法、4. 特定のプロトコルのトンネルとして SSH を使用する方法。 1. SSHDを設定するこの例では、Linuxシステム(この場合はFedora 33)をSSHサーバーとして使用し、PuTTY SSHクライアントからの接続を許可します。まず、デーモンのSSH設定を確認します。設定ファイルは # $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $ この例では、何もコメント解除していないデフォルト設定で動作するはずです。SSHデーモンが実行中かどうかを確認するには、 $ systemctlステータス sshd 非アクティブの場合は、コマンド ` 2. リモートコントロールコンソールを設定するWindowsにPuTTYインストーラーをダウンロードし、インストールして開きます。次のようなウィンドウが表示されます。 PuTTY設定画面 「ホスト名(またはIPアドレス)」入力ボックスに、Linuxシステムの接続情報を入力します。この記事では、ブリッジネットワークアダプタを使用するFedora 33仮想マシンを設定し、IPアドレス PutTTY セキュリティ警告 これはSSHのセキュリティ対策の一つで、中間者攻撃を防ぐために設計されています。メッセージ内のフィンガープリントは、Linuxシステムの ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub 出力は PuTTY によって表示されるフィンガープリントと一致するはずです。 $ ssh -keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub PuTTYのセキュリティプロンプトを確認し、「はい」をクリックします。ホストシステムのフィンガープリントは、WindowsレジストリにあるPuTTYの信頼済みリストに保存されます。 HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys 正しいログイン資格情報を入力すると、ユーザーのホームディレクトリにあるコンソールにアクセスできるようになります。 SSHにログインしました 3. ネットワーク経由でファイルをコピーするリモートコンソールに加えて、PuTTYを使ってSSH経由でファイルを転送することもできます。PuTTYは C:\"Program Files (x86) "\PuTTY\pscp.exe [email protected]:/home/stephan/MyFile.txt 。Windows ホーム ディレクトリから Linux ユーザーのホーム ディレクトリにファイルをコピーするには、次のように入力します。 C:\"Program Files (x86) "\PuTTY\pscp.exe MyFile.txt [email protected]:/home/stephan/すでにご存知かもしれませんが、コピー コマンドは通常次のように構成されます。 pscp.exe <ソース> <ターゲット> 4. プロトコルのトンネリングLinuxマシンで特定のアプリケーション用のHTTPベースのサービスを実行しているとします。Windowsマシンからインターネット経由でこのHTTPサービスにアクセスしたいとします。さらに、以下の理由により、関連するTCPポートをパブリックインターネットに公開することはできません。
一見すると、深刻な脆弱性を生じさせずにこのようなアーキテクチャを構築することは不可能に思えます。しかし、SSHはこのような状況に対して簡単に安全なソリューションを提供できます。 このプロセスを、私のソフトウェアプロジェクト「Pythonic」を使って説明します。これはコンテナ内で実行されます。Pythonicはコンテナとして実行され、TCPポート7000(メインエディタ)とTCPポート8000(コードサーバのコードエディタ)の2つのTCPポートを開きます。 Linux マシンに Pythonic をインストールするには、次のコマンドを実行します。 podman プル pythonicautomation/pythonic Windowsマシンに切り替え、PuTTYを開き、「接続」→「SSH」→「トンネル」に移動します。転送したい2つのTCPポートを追加します。
PuTTYでのポート転送 次に「セッション」セクションに戻り、先ほどと同様にSSH接続を確立します。Webブラウザを開き、 Pythonic ポート転送の設定が正常に完了しました。 警告:TCPポート22をパブリックインターネットに公開する場合は、簡単に推測できるログイン認証情報は使用しないでください。世界中から、一般的な標準認証情報を使ってLinuxマシンにログインしようとするログインリクエストが届くことになります。そのため、ログインできるのは既知のユーザーのみにしてください。このログイン制限は、公開鍵暗号方式によって実現できます。公開鍵はSSHホストに保存され、秘密鍵はクライアントに保存される鍵ペアが使用されます。 デバッグLinux マシンへの接続に問題がある場合は、SSH デーモンのプロセスを追跡できます。 journalctl -f -u sshd これは通常のログイン プロセスですが、ログ レベルは DEBUG であり、次のようになります。 LogLevel DEBUG出力 もっと詳しく知るこの記事ではSSHの使い方についてはほとんど触れていません。特定のユースケースに関する情報をお探しの場合は、インターネットで無数のチュートリアルを見つけることができるでしょう。私は職場でPuTTYを使用しています。セットアップが簡単で、2つのOS間での相互運用性が高いため、接続ソリューションの万能ツールと言えるでしょう。 (この記事の画像はStephan Avenwedde氏提供、CC BY-SA 4.0より引用) |