SSHを使用したリモート・アクセス
SSH接続を使用して、リモート・リソース、ネットワークおよびアプリケーションに安全にアクセスします。
SSHを使用したサービスとネットワークへのリモート・アクセス
SSHポート転送(SSHトンネリングとも呼ばれる)は、ローカル・システムとリモート・システム間の暗号化されたSSH接続を介してデータを安全に転送します。SSHトンネルの確立後、SSHクライアントは指定されたローカル・ポートをリスニングし、そのポートに到着するすべてのトラフィックを対応するリモート・ポートに転送します。
転送中のデータを暗号化することで、SSHポート転送により、機密情報がセキュアでアクセスできないことが保証され、インターネットに直接アクセスすることなくリモート・サービスおよびネットワークへのセキュアなアクセスが可能になり、ファイアウォールやネットワークの制限が回避されます。
SSHポート転送の主なタイプは次の3つです。
- 「ローカル・ポート転送」では、ポートがクライアントからSSHサーバーに転送された後、宛先ポートに転送されます。
- 動的ポート転送: 様々なポートにわたる通信のためのSOCKSプロキシ・サーバーを作成します。
- 「リバース・ポート転送」は、ポートをサーバーからクライアントに転送した後、宛先ポートに転送します。
ポート転送を使用すると、パブリック・ネットワーク・インタフェースに公開されていないサービスにアクセスできます。リモート・サーバー上のサービス(データベースなど)にアクセスするためにローカル・ポート転送を設定できます。サーバー上のデータベースはパブリック・ネットワーク・インタフェースに公開されていませんが、ローカル・マシンから内部データベース・サーバー・ポートへのトンネルを作成できます。その後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接続が開き、localhostポート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 &
&
(アンパサンド)を追加すると、アプリケーションがバックグラウンドで実行され、他のコマンドの端末が解放されます。