sshやscpの多段接続やsshベースの簡易VPNツールsshuttle

公開 | 更新 

ssh の トンネリング 機能を活用して、直接接続出来ない遠隔ホストへの踏み台を介した ssh 接続や scp ファイル転送、そしてLinuxやmacOSで簡易的なVPNを実現する sshuttle やAndroidアプリ ShellTun の使い方をまとめてみました。

sshの多段接続

以下の例のように遠隔地にある接続先ホストへsshで入りたい場合、ルータ上でカスタムポートでのポートフォワーディングを設定している踏み台ホストを介して接続することになるわけですが、これまで単純にステップ・バイ・ステップで接続していました。

図1.sshの多段接続例

図1.sshの多段接続例

これをsshのトンネルオプションを用いると、ワンライナーで多段接続が確立します。

さらに、繋ぎ方を予め~/.ssh/configファイルに定義しておけば、通常のsshと同程度の呼び出し方で済むので、頻繁に使うことの多い時などは便利です。

UbuntuのファイルマネージャNautilusもこの設定ファイルを参照するので、他の場所へ接続の入力BOXで、

とすれば踏み台経由でファイル操作が可能になります。

 

scpの多段ファイル転送

同様にsshを用いたファイル転送コマンドscpでも、ProxyCommandを使って多段ファイル転送することが出来ます。

今まではまず、カスタムポートでポートフォワーディングが設定されている踏み台ホストへ、scpで転送していました(scpのポート指定は大文字の -P であることに注意)。

そしてさらに踏み台ホストからバケツリレーする必要があるので本当に手間取ります。これがProxyCommandでsshトンネリングを介したファイル転送は、少し長くなりますが次のようなワンライナーで可能です(ProxyCommandの中で使うカスタムポート指定はsshのオプションなので、小文字 -p になる)。

図2.scpの多段転送例

図2.scpの多段転送例

sshベースの簡易VPN : sshuttle

LinuxやmacOSでは、このsshトンネリング機能を使った簡易VPNツールsshuttleを使って、簡単にVPNを張ることができます。

インストールもパッケージマネージャaptから行えるので簡単です。以降、Ubuntu 18.04を例に話を進めます。

GitHubにある執筆時点の最新版はv1.1です。さすがに四年前のUbuntuではだいぶ古いバージョンがインストールされましたが、特に問題無く使えています。

使い方はsshと同様の接続先表記の後ろに、適用したいネットワークサブネットを付記するだけ。全トラフィックを図1の踏み台へ向けて、ルーティングさせるのは次の要領です。

一部のバージョンでは、ssh接続先までルーティングされてしまうバグがあってエラーになることから、私はいつも次のようにして接続先を除外して使っています。

全てのトラフィックではなく、例えば接続先のLANサブネットのみをトンネルに入れる場合は次の通り。

Gnomeターミナルからsshuttleを実行する次のようなショートカットを作っておいて、必要な時にダブルクリック一発で繋がるようにしています。

図3.sshuttleショートカット

図3.sshuttleショートカット

ローカルの管理者パスワード入力の後、接続先のパスワードを入力すれば接続が確立します。このターミネルウィンドウを閉じてしまうと、接続は切れてしまうので注意。また、 Ctrl+C でも接続を終わらせることが出来ます。

図4.ショートカットから実行中

図4.ショートカットから実行中

Android向けssh VPNアプリ : ShellTun

AndroidではShellTunというアプリで、簡単にssh VPNを実現することが出来ます。
Google Play で手に入れよう
設定はまず接続先サーバをShellTun側で用意しているものから、Custom Serverとして、 edit から基本的な接続先情報を入力。今回の例のようにカスタムポートを使用するには、 Stealth Settings でStealth Tunnelを有効にした上で、ポート番号をセットします。

図5.ShellTun設定

図5.ShellTun設定

アプリメインでCONNECTをタップして次のような画面になれば、接続は確立しています。

図6.ShellTun接続確立

図6.ShellTun接続確立

 

created by Rinker
¥2,376 (2024/04/19 11:33:05時点 Amazon調べ-詳細)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA