SSHを使用したリモート・アクセス

SSH接続を使用して、リモート・リソース、ネットワークおよびアプリケーションに安全にアクセスします。

SSHを使用したサービスとネットワークへのリモート・アクセス

SSHポート転送(SSHトンネリングとも呼ばれる)は、ローカル・システムとリモート・システム間の暗号化されたSSH接続を介してデータを安全に転送します。SSHトンネルの確立後、SSHクライアントは指定されたローカル・ポートをリスニングし、そのポートに到着するすべてのトラフィックを対応するリモート・ポートに転送します。

転送中のデータを暗号化することで、SSHポート転送により、機密情報がセキュアでアクセスできないことが保証され、インターネットに直接アクセスすることなくリモート・サービスおよびネットワークへのセキュアなアクセスが可能になり、ファイアウォールやネットワークの制限が回避されます。

SSHポート転送の主なタイプは次の3つです。

ポート転送を使用すると、パブリック・ネットワーク・インタフェースに公開されていないサービスにアクセスできます。リモート・サーバー上のサービス(データベースなど)にアクセスするためにローカル・ポート転送を設定できます。サーバー上のデータベースはパブリック・ネットワーク・インタフェースに公開されていませんが、ローカル・マシンから内部データベース・サーバー・ポートへのトンネルを作成できます。その後localhostに接続でき、すべてのトラフィックがSSHトンネルを介してリモート・データベースに転送されます。

逆ポート転送を使用すると、ローカル・ネットワーク外のユーザーが内部サービスにアクセスできるようになります。たとえば、自分がローカル・マシンで開発したWebアプリケーションを仲間の開発者に示すことができます。使用しているマシンにはパブリックIPがないため、他の開発者がインターネット経由でそのアプリケーションにアクセスすることはできません。しかしながら、自分がリモートSSHサーバーにアクセスできる場合は、逆ポート転送を設定して仲間の開発者がアクセスできるようにすることができます。

サーバーでのポート転送の構成

SSHポート転送を構成するには:

  1. コマンドラインから、管理権限を使用してSSHを使用してインスタンスに接続します。
  2. /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転送の有効化

  1. コマンドラインから、管理権限を使用してSSHを使用してインスタンスに接続します。
  2. /etc/ssh/sshd_configファイルでX11Forwardingを有効にします。

    /etc/ssh/sshd_configからX11Forwardingを省略した場合、デフォルトはnoです。X11転送を有効にするには、このパラメータの値をyesに設定するエントリを追加します。

    X11Forwarding yes
  3. 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ファイルは自動的に作成されるため、この警告は無視してかまいません。

  4. sshdサービスを再起動すると、変更内容が適用されます。
    sudo systemctl restart sshd.service

X11転送を使用してアプリケーションをリモートで起動します。

  1. 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])?
  2. yesと入力します。
    Warning: Permanently added 'remote-server' (ECDSA) to the list of known hosts.
  3. ローカル・システム上に表示されるリモート・サーバーでグラフィカル・アプリケーションを起動します。たとえば、geditなどのグラフィカル・テキスト・エディタを実行するには、次のように入力します。
    gedit &
    末尾に& (アンパサンド)を追加すると、アプリケーションがバックグラウンドで実行され、他のコマンドの端末が解放されます。