SSHを使用したリモート・アクセス
SSH接続を使用して、リモート・リソース、ネットワークおよびアプリケーションに安全にアクセスします。
SSHを使用したサービスとネットワークへのリモート・アクセス
SSHポート転送(SSHトンネリングとも呼ばれる)は、ローカル・システムとリモート・システムの間で暗号化されたSSH接続を介してデータを安全に転送します。SSHトンネルの確立後、SSHクライアントは指定されたローカル・ポートをリスニングし、そのポートに到着しているトラフィックを、対応するリモート・ポートへの接続を介して転送します。
転送中のデータを暗号化することで、SSHポート転送により、機密情報が安全でアクセス不能になり、インターネットに直接露出することなくリモート・サービスおよびネットワークへのセキュアなアクセスが可能になり、ファイアウォールやネットワークの制限が回避されます。
SSHポート転送の主な3つのタイプは次のとおりです。
- ローカル・ポート転送: ポートをクライアントからSSHサーバーにに転送した後、宛先ポートに転送します。
- 動的ポート転送: ポートの範囲にわたる通信のためのSOCKCプロキシ・サーバーを作成します。
- 逆ポート転送: ポートをサーバーからクライアントへ転送してから、宛先ポートに転送します。
ポート転送を使用すると、パブリック・ネットワーク・インタフェースに公開されていないサービスにアクセスできます。リモート・サーバー上のサービス(データベースなど)にアクセスするためにローカル・ポート転送を設定できます。サーバー上のデータベースはパブリック・ネットワーク・インタフェースに公開されていませんが、ローカル・マシンから内部データベース・サーバー・ポートへのトンネルを作成できます。その後localhostに接続でき、すべてのトラフィックがSSHトンネルを介してリモート・データベースに転送されます。
逆ポート転送を使用すると、ローカル・ネットワーク外のユーザーが内部サービスにアクセスできるようになります。たとえば、自分がローカル・マシンで開発したWebアプリケーションを仲間の開発者に示すことができます。使用しているマシンにはパブリックIPがないため、他の開発者がインターネット経由でそのアプリケーションにアクセスすることはできません。しかしながら、自分がリモートSSHサーバーにアクセスできる場合は、逆ポート転送を設定して仲間の開発者がアクセスできるようにすることができます。
サーバーでのポート転送の構成
SSHポート転送を構成するには:
- コマンドラインから、管理権限を使用してSSHを使用してインスタンスに接続します。
/etc/ssh/sshd_config
ファイルを編集します。少なくとも、次のパラメータを確認します。-
AllowTCPForwarding
TCPポート転送を許可します。省略した場合、デフォルトは
yes
であり、単一のTCPポート転送およびSOCKSプロキシが有効になります AllowStreamLocalForwarding
UNIXドメイン・ソケットの転送を許可します。省略した場合、デフォルトは
yes
です。
-
ローカル・ポート転送
SSH経由のローカル・ポート転送では、クライアント・システム上のローカル・ポートがサーバー・システム上のリモート・ポートにマップされます。この構成では、サービスがファイアウォールの背後で実行されているか、パブリック・ネットワーク・インタフェースでリスニングしていない可能性があるため、アクセスできないリモート・システム上のサービスにアクセスできます。
ダイレクトTCP転送トンネルを作成するには、次のように、sshで-L
オプションを使用します。
ssh -L <bind_address>:<port>:<destination>:<destination_port> <user>@<remote_ssh_server>
bind_address
オプションであり、これにより、接続をリスニングするローカル・インタフェースを割り当てます。省略した場合は、sshにより、ループバック・インタフェースにのみバインドします。すべてのインタフェースにバインドするには、0.0.0.0または::を使用します。
port
ローカル・ポート番号です。
1024
より大きい任意のポート番号を使用できます。destination
宛先マシンのIPまたはホスト名。宛先がリモート・サーバー自体にある場合は、
localhost
を使用します。destination_port
宛先マシン上のポート。
user@remote_ssh_server
リモートSSHユーザーおよびサーバーIPアドレス。
例:
ssh -L <8080>:localhost:<8888> <user>@<129.145.0.164>
これにより、リモート・サーバー(192.168.1.20)へのSSH接続が開き、ローカル・ホスト・ポート8888へのトンネルが開きます。
動的ポート・フォワーディング
動的ポート転送を使用して、指定したバインディング・ポートがSSHクライアントでリスニングされ、SOCKSプロキシ・サーバーとして機能するようにします。指定したポートのすべての着信接続はトンネルを介して宛先マシン上の動的ポートに転送されるので、宛先ホストを指定する必要はありません。
動的ポート転送を作成するには、sshで-D
オプションを使用します。
ssh -D <bind_address>:<port> <user>@<remote_ssh_server>
逆ポート転送
逆方向トンネルでは、リモートSSHサーバーで受信した接続がすべてローカル・クライアント・ネットワークに転送されます。
逆ポート転送を作成するには、sshで-R
オプションを使用します。
- ローカル・ポート逆転送の場合:
ssh -R <bind_address>:<port>:<destination>:<destination_port> <user>@<remote_ssh_server>
- 動的ポート逆転送の場合:
ssh -R <bind_address>:<port> <user>@<remote_ssh_server>
SSHを使用したX11ベースのアプリケーションのリモート・アクセス
X11転送では、SSH接続を使用して、リモートOracle LinuxシステムでグラフィカルなX11ベースのアプリケーションを起動し、ローカル・システムからそれを使用できます。リモート・システムでX11サーバーまたはグラフィカル・デスクトップ環境が実行されている必要はありませんが、ローカル・システムでX11互換サービスが実行されている必要があります。
リモート・サーバーでのX11転送の有効化
- コマンドラインから、管理権限を使用してSSHを使用してインスタンスに接続します。
/etc/ssh/sshd_config
ファイルでX11Forwarding
を有効にします。/etc/ssh/sshd_config
からX11Forwarding
を省略した場合、デフォルトはno
です。X11転送を有効にするには、このパラメータの値をyes
に設定するエントリを追加します。X11Forwarding yes
- X11パッケージをインストールします。
dnf install xorg-x11-xauth xorg-x11-fonts-\* xorg-x11-utils dbus-x11
リモート・サーバーでグラフィカル・アプリケーションを実行したことがない場合は、初めてX11転送を使用してリモートサーバーに接続すると、次の警告メッセージが表示されます。/usr/bin/xauth: file /home/user/.Xauthority does not exist
.Xauthorityファイルは自動的に作成されるため、この警告は無視してかまいません。
- 変更を有効にするために、
sshd
サービスを再起動します。sudo systemctl restart sshd.service
X11転送を使用したリモートでのアプリケーションの起動
- SSHを使用してリモート・サーバーにログインします。
ssh -X <user>@<server1.example.com> The authenticity of host 'remote-server (192.168.122.120)' can't be established. ECDSA key fingerprint is SHA256:uYwFlgtP/2YABMHKv5BtN7nHK9SHRL4hdYxAPJVK/kY. Are you sure you want to continue connecting (yes/no/[fingerprint])?
- yesと入力します。
Warning: Permanently added 'remote-server' (ECDSA) to the list of known hosts.
- ローカル・システムに表示されるリモート・サーバーでグラフィカル・アプリケーションを起動します。たとえば、
gedit
などのグラフィカル・テキスト・エディタを実行するには、次のように入力します。末尾にgedit &
&
(アンパサンド)を追加すると、アプリケーションがバックグラウンドで実行され、端末が他のコマンド用に解放されます。