単一の SSH 接続を使用してローカルのようにリモート サービスにアクセスする

単一の SSH 接続を使用してローカルのようにリモート サービスにアクセスする

単一のSSHトンネルを作成して、リモートホストをローカルシステム上にあるかのようにアドレス指定することは可能ですか?たとえば、次の疑似例を入力します。地元で望ましい効果が得られます。

  • データベースをコピー:mysqldump remote | mysql localまたはmysqldump local | mysql remote
  • リモート ファイルにテキストを追加します。echo blah >> remote:file.txt
  • リモートファイルの変更:sed ... remote:file.txt
  • リモートコマンドを実行します。apk add blah

単一の接続が不可能な場合、これらを実現する最も便利な方法は何ですか?

答え1

リモート mysql にアクセスするには、次のように転送して localhost:12345 を使用できます。

ssh -Nf -L 12345:localhost:3306 user@remote

ファイル操作の場合、sshfs 経由でリモート ホストをマウントできます。

mkdir /tmp/remote
sshfs user@remote:/ /tmp/remote
echo blah >> /tmp/remote/file.txt
sed ... /tmp/remote/file.txt

リモート コマンドの実行は、通常どおり ssh 経由で機能します。

ssh user@remote command ....

これらすべてを1つの接続だけで実行できますこれを ~/.ssh/config に追加した場合:

ControlMaster auto
ControlPath ~/.ssh/masters/%l%r@%h:%p

最初の ssh 接続がマスターとなり、次の接続ではそれを再利用します。新しいスレーブ接続は非常に高速に利用可能になります。初期のキー交換のオーバーヘッドなどはありません。

関連情報