OpenSSH を最大限に活用する方法
OpenSSH は、すべてのトラフィックを安全に暗号化するネットワーク接続およびリモート ログイン ツールであり、元々は OpenBSD 開発者がオペレーティング システムで使用するために開発したものです。 OpenBSD 開発者がセキュリティに主に焦点を当てていることを考慮すると、OpenSSH がすぐにすべての Linux および Unix オペレーティング システムの標準リモート ログイン実装になったのは驚くべきことではありません。 OpenSSH は、クライアント機能を提供する ssh コマンドとサーバー機能を提供する sshd コマンドを備えたクライアント サーバー モデルを使用します。
このチュートリアルでは次のことを学習します。
OpenSSHのインストール方法
リモートシェルにログインする方法
scp を使用してマシン間でファイルをコピーする方法
-
キーベースの認証を有効にし、パスワードベースのログインを無効にする方法
頻繁にアクセスするマシンの構成を保存して接続を容易にする方法
SSH プロトコル経由でリモート ファイル システムをマウントする方法
ポートフォワーディング/トンネリングの使用方法
NAT/ファイアウォールの背後にあるマシンにアクセスするには
Web プロキシを作成するには
OpenSSH を最大限に活用する方法 – ヒントとコツ
ソフトウェア要件と使用される規約
OpenSSHのインストール
ほとんどのディストリビューションには、初期インストール時に OpenSSH をインストールするオプションが用意されていますが、このオプションが選択されていない場合でも手動でインストールできます。 Debian および Red Hat ベースのシステムでは、サーバーとクライアントを個別にインストールする必要がありますが、Arch ベースのシステムでは、クライアントとサーバーは単一のパッケージとしてインストールされます (以下の例を参照)。ファイアウォールを使用している場合は、サーバーとして使用するマシン上の受信トラフィック用にポート 22 を必ず開いてください。
Debian ベースのシステムの場合
$ sudo apt-get install openssh-server
$ sudo apt-get install openssh-client
Red Hat ベースのシステムの場合 (注: Fedora バージョン 22 以降では、yum を dnf に置き換えてください)
$ sudo yum install openssh-server
$ sudo yum install openssh-client
Arch ベースのシステム上
$ sudo pacman -S openssh
ssh サーバーをインストールした後、ディストリビューションによってはデフォルトで sshd サービスが有効になる場合とそうでない場合があります。上記のディストリビューションの最近のバージョンでは、次のように入力して、ssh デーモンが有効になっていて、クライアントから接続できることを確認します。
$ sudo systemctl start sshd
$ sudo systemctl enable sshd
これにより、今すぐとその後の起動時にサービスが開始されます。
リモートシェルにログインする
リモート シェルへのログインは、OpenSSH の最も基本的で一般的な使用法です。次のコマンドを使用すると、ネットワークに接続されたマシンから別のマシンにログインできます (両方のマシンに Open SSH がインストールされていることが前提)。注: 「username 」を、ログインするユーザーのユーザー名に置き換えます。同じネットワーク上の別のコンピュータに接続している場合は、「host 」をそのコンピュータの IP アドレスまたはホスト名に置き換えます。インターネット経由でマシンにログインしている場合は、「host 」をそのマシンの IP アドレスまたはドメイン名に置き換えます。
$ ssh username@host
デフォルトでは、sshd は認証にユーザーのパスワードを必要とするため、ユーザーのパスワードを入力すると、そのユーザーとしてそのマシンにログインすることになります。ユーザーが root ユーザーであるか、sudo 権限を持っている場合は、マシンをリモートから完全に管理できるようになります。デフォルトの 22 以外のポート (10001 など) を使用しているサーバーに接続している場合は、「 -p 10001 」 (「-p
” は、ssh とコマンドの残りの部分の間で小文字にする必要があります (これについては後で詳しく説明します)。
マシン間でのファイルのコピー
scp コマンドを使用すると、あるマシンと別のマシンの間でファイルをコピーできます。これを行うには、まずコピーするファイルのパスを指定し、次にファイルのコピー先のパスを指定する必要があります。
たとえば、ファイル todolist.txt
をクライアントの ~/Documents
フォルダからリモート マシンの ~/Downloads
フォルダにコピーするには、次のように入力します。
$ scp ~/Documents/todolist.txt username@host:~/Downloads/
同様に、サーバーからクライアントにファイルをコピーできます。サーバー上のファイルのパスを指定し、その後にクライアント マシン上の目的のパスを指定するだけです。たとえば、次のコマンドを実行すると、アップロードしたのと同じ todolist.txt
をローカル マシンの /tmp
ディレクトリにコピーできます。
$ scp username@host:~/Downloads/todolist.txt /tmp/
デフォルトの 22 以外のポート (10001 など) を使用しているサーバーとの間でコピーする場合は、ポート番号とポート番号の間に「 -P
10001 」を挿入してポート番号を指定する必要があることに注意してください。 scp と残りのコマンド。また、ssh コマンドで使用される小文字の p
とは対照的に、これは大文字の P
であることに注意してください。ディレクトリをコピーするプロセスは同じですが、ディレクトリとその中のすべてのサブディレクトリおよびファイルを再帰的にコピーするには、「-r
」フラグを指定する必要があります。次のコマンドは、Documents ディレクトリ全体をローカル ユーザーからリモート ユーザーのダウンロード フォルダーにコピーします。
$ scp -r ~/Documents username@host:~/Downloads/
scp コマンドの代わりに、sftp コマンドを使用してマシン間でファイルを転送できます。従来の ftp コマンドと同様に動作しますが、ftp とは異なり、完全に暗号化されます。
キーベースの認証の構成
安全なホーム ネットワークで OpenSSH を使用している場合は、パスワード認証で問題ない可能性があります。ただし、インターネット経由で使用する場合は、セキュリティを強化するために、インターネットに接続されているサーバーでキー ベースの認証を有効にし、パスワード認証を無効にすることをお勧めします。これは、ログイン時にパスワードを入力する手間を省きたい場合や、サーバー マシンを公共 Wi-Fi 上で使用する場合にも役立ちます。
キー ベースの認証では、ローカル クライアント マシンにのみ保存されている秘密キーと、リモート サーバーに保存されている公開キーで構成される暗号化キー ペアが使用されます。
まず、ローカル クライアント マシン上で秘密キーと公開キーのペアを生成します。
$ ssh-keygen -t rsa
次に、公開キーのみをリモート マシンにアップロードします。
$ ssh-copy-id -i ~/.ssh/id_rsa.pub username@host
ここでリモート サーバーにログインします。ユーザー パスワードの入力を求められない場合は、キーベースのログインが機能しているため、パスワードベースのログインを無効にすることができます。 お気に入りのテキスト エディタを使用して、root または sudo で /etc/ssh/sshd_config
を開きます。
$ sudo vim /etc/ssh/sshd_config
これらのフィールドのはいをいいえに変更し、必要に応じてコメントを解除して、次の変更を加えます(行が # で始まる場合は削除します)。
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
次に、sshd サービスをリロードします。
$ sudo systemctl reload ssh
頻繁にアクセスするマシンの構成を保存して接続を容易にする
頻繁にアクセスするマシンの構成を保存すると、より簡単に接続できるようになり、便利な場合があります。特にデフォルト以外のポート(22 ではない)で sshd をリッスンしている場合はそうです。これを行うには、~/.ssh/config
ファイルにエントリを追加します。 次のコマンドを使用して接続するマシンのエントリ
$ ssh -p 1666 bob@remotemachine
このように見えます。
host remotemachine
User bob
Hostname remotemachine
Port 1666
その後、次のコマンドを使用してそのマシンにアクセスできるようになります。
$ ssh remotemachine
SSHFS を使用したネットワーク ファイル システムのマウント
OpenSSH スイートの一部ではありませんが、sshfs はパッケージ マネージャーを使用してインストールし、ネットワーク経由でリモート ファイル システムをマウントするために使用できます。ローカル ファイル システム上の user1@machine1 のホーム ディレクトリにアクセスすると仮定します。
リモート ファイル システムをマウントするディレクトリを作成します。
$ mkdir sshmount
リモート パスとマウント先のローカル パスを指定して、ファイル システムをマウントします。
$ sshfs user1@machine1:/home/user1 sshmount
ファイルシステムをアンマウントするには、次のコマンドのいずれかを発行します。
$ fusermount -u sshmount
または
$ sudo umount sshmount
ポートフォワーディング/トンネリング
トンネリングとも呼ばれるポート転送を使用すると、ネットワーク トラフィックが平文で送信されるアプリケーションやプロトコルに暗号化を提供できます。次の 2 つの例は、ポート転送の他の 2 つの使用法を示しています。
NAT またはファイアウォールの背後にあるマシン上のリモート シェルへのアクセス
NAT またはファイアウォールの背後にあるマシンにインターネット経由で ssh 接続したい場合はどうすればよいでしょうか?このシナリオには 3 台のマシンがあります。
リモートでログインする NAT の背後にあるマシン
SSH アクセスできるインターネットに接続されたサーバー
インターネット経由でマシン 1 にログインするために使用する、別のネットワーク上のマシン
ssh コマンドの場合、-L
スイッチは、指定されたローカル ポートへの接続を、指定されたホスト ポートに転送します。同様に、-R
スイッチは、指定されたリモート ポートへの接続を、指定されたローカル ポートに転送します。
マシン 1 で次のコマンドを入力します。
user1@1 $ ssh -R 10125:localhost:22 user2@2
マシン 3 で次のコマンドを入力します。注: 2 番目のコマンドは、新しいターミナル ウィンドウまたは TTY で開く必要があります。
user3@3 $ ssh -L 10001:localhost:10125 user2@2
user3@3 $ ssh user1@localhost -p 10001
最初のコマンドはマシン 2 に正常にログインしたように見えますが、マシン 1 のポート 22 (sshd サービス) をマシン 2 のポート 10125 にバインドし、マシン 2 のポート 10125 への接続がマシン 1 のポート 22 に転送されるようにします。 2 番目のコマンドもマシン 2 に正常にログインしているように見えますが、マシン 3 のポート 10001 をマシン 2 のポート 10125 にバインドして、マシン 3 のポート 10001 への接続がマシン 2 のポート 10125 に転送されるようにします。その後、最終的にマシン 3 は、作成したトンネルを介して転送した自身のポート 10001 に接続することで、マシン 1 にログインすることができました。
OpenSSH を Web プロキシとして使用する
-D
フラグを使用すると、リモート SSH サーバーを SOCKS プロキシとして使用できます。これは、たとえば、公共 WiFi を使用していてプライバシーをさらに確保したい場合、またはトラフィックを覗き見したりコンテンツを検閲する可能性のある職場/学校/その他のネットワークを使用している場合など、Web ブラウジングに特に役立ちます。
次のコマンドを発行するだけで、ローカル マシンのポート 8888
を SOCKS プロキシとして使用できるようになり、ポート 8888 への接続がリモート サーバーに安全に転送され、覗き見から完全に暗号化されます。ローカルネットワーク。
ssh -D 8888 username@host
Firefox での SOCKS プロキシの構成