LoginSignup
6
9

More than 3 years have passed since last update.

2段のサーバを経由してWinSCPを使う

Last updated at Posted at 2019-05-11

状況

環境を次のように仮定する。localからはalphaのみにSSH接続可能。そこからbetaを経由して目的のgammaに接続できる。
graph1.png

Windows Subsystem for LinuxでUbuntu18.04を使用。~/.ssh/configに以下のように記述しておく。

~/.ssh/config
Host alpha
     HostName alpha.example.com
     Port 22
     User mura
     PasswordAuthentication yes
Host beta
     HostName beta.example.com
     Port 22
     User mura
     PasswordAuthentication yes
     ProxyCommand ssh -W %h:%p alpha
Host gamma
     HostName gamma.example.com
     Port 22
     User mura
     PasswordAuthentication yes
     ProxyCommand ssh -W %h:%p beta

こうすると、例えばlocalにおいてgammaからファイルをダウンロードするときは

scp gamma:~/hoge/fuga/baz.dat ./

などとできるが、gammaの対象ディレクトリが深くなると面倒である。

踏み台サーバ経由のSCP

Windowsでよく利用されるFTPクライアントとしてWinSCPがある。

WinSCPでは踏み台サーバが一つの場合トンネル設定により目的のサーバにアクセスできる。しかしトンネルの数を増やすことはできない。2段以上になったときにできることはないか調べてみると次のようなページを発見した。

これらの記事にはPutty・Rloginを使うとできるとあるが、WSLを使っている身としては新たにクライアントをインストールするのは癪なのでなんとかしたい。

PuttyやRloginがやってることはポートフォワーディングなので、UbuntuのSSHコマンドで同じ動作が達成できればよい。

WSLでやってみる

WinSCPのプロキシ形式でSOCKS5を利用する場合はWSLのUbuntuで以下のように入力すればよい。alphaのパスワードを入力すると何も起こらないように見えるが、きちんと動作している。
参考ページはここ

ssh alpha -fND localhost:10022

オプションの説明

f: バックグラウンドで動作
N: 何もしない
D: 動的フォワーディング
-fNでつなぎっぱなしを意味する。

WinSCP側の設定

新しい接続先にgammaのホスト名・ポート番号・ユーザ名を入力し、詳細タブを選択する。
winscp.png

プロキシ形式でSOCKS5を選択。Ubuntuで入力したコマンドに従ってプロキシホスト名(localhost)とポート番号(10022)を入力し、「ローカルホストからもプロキシ接続を行う」にチェックを入れる。
proxy.png

トンネルタブに移って「SSHトンネルを経由して接続する」にチェック。サーバbetaの情報を入力。
tunnel.png

OKを押して設定を保存する。あとはログインボタンを押してbetaとgammaのパスワードを入力すれば接続できる。

余談

今回は2段の踏み台サーバを経由したが、目的サーバの2つ前のサーバまでトンネルを掘れば原理的には何段でも使えると思われる。

あと、コネクションを削除するときには該当プロセスを以下のように探すことができる。
SSHでトンネリング

ps aux | grep ssh
6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9