FileZilla という FTP ソフトは SSH トンネリング接続ができない。
例えば、IPアドレスでアクセス制限されているサーバに、接続許可されているサーバを経由して接続するのをトンネリング接続というんだけど(接続許可されているサーバがポートフォワードという方法を使って、「俺です」って嘘ついてデータのやり取りをするわけ)、FileZilla という macOS でよく使われているソフトにはその機能がない。
なので、SSH ソフトを使ってトンネリングできる環境(ポートフォワード設定)を作って、FileZilla でそれを利用する形になる。
外出先でどうしてもお客さんのサーバのデータを確認しないといけなくなったときはトンネリング接続で SFTP を利用しないといけない。Windows PC が手元にあったら WinSCP という素晴らしいソフトがあるので(毎年寄付してます!(笑))いいんだけど、Macbook Air しか持ってないときは困るのよね。
というわけで、やり方をメモしておく。
1.手元の macOS 上でターミナルを2つ起動する
2.ターミナル1でローカルからリモート方向へのトンネリングのための SSH 接続を行う
トンネリング時の入り口(SFTP接続時に指定する自分自身(localhost))のポート番号):14649
最終的に接続したいサーバの IP アドレス:210.XXX.XXX.XXX
最終的に接続したいサーバのポート番号:22(SSH 接続)
(例)14649:210.XXX.XXX.XXX:22
接続を許可されているサーバ(踏み台)のユーザ:shinoda
接続を許可されているサーバ(踏み台)のホスト名:chinko.exsample.com
接続を許可されているサーバ(踏み台)の接続先ポート番号:22(SSH接続)
(例)shinoda@chinko.exsample.com -p 22
~ % ssh -L 14649:210.XXX.XXX.XXX:22 shinoda@chinko.exsample.com -p 22
shinoda@chinko.exsample.com's password: <chinko.exsample.com にログインするときのパスワード>
Last login: Sun Dec 8 09:34:15 2024 from kd1061550.manman.exsample.com
ログインしたら、そのターミナルは閉じずにそのまま置いておく(exit すると、掘られた「トンネル」も閉じる)
3.ターミナル2で、トンネリング時の入り口ポートが接続待ちになっていることを確認
~ % netstat -na | grep 14649
tcp4 0 0 127.0.0.1.14649 *.* LISTEN
tcp6 0 0 ::1.14649 *.* LISTEN
port 14649 が LISTEN(接続待ち)になっている
4.FileZilla でローカルホストに接続
サイトマネージャを開き、トンネリング接続のための設定を行う
プロトコル:SFTP
ホスト:localhost
ポート:14649
ログオンタイプ:通常
ユーザー:最終的に接続したいサーバのログインユーザ
パスワード:最終的に接続したいサーバのログインユーザのパスワード
上記設定で接続を行えば、localhost(自分自身 macOS)→接続を許可されているサーバ(踏み台)→最終的に接続したいサーバ という経路で接続される。
「最終的に接続したいサーバ」から見たら、「接続を許可されているサーバ(踏み台)」から接続してきていると思っているが、実はこっそり掘ったトンネルを通って localhost が接続しているという形。
上記の動きを、FileZilla ではなくターミナル上で確認してみることもできる。ターミナル2で以下のように、「最終的に接続したいサーバ」にログインできることを確認する(以下の例は、初めての接続だったので、「このホスト、本物?信用していい?」と聞かれてます(笑))
~ % ssh -l root localhost -p 14649
The authenticity of host '[localhost]:14649 ([::1]:14649)' can't be established.
ED25519 key fingerprint is SHA256:4hlxCQFIfF<略>+0Cf0.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:14649' (ED25519) to the list of known hosts.
最終的に接続したいサーバのログインユーザ@localhost's password: <最終的に接続したいサーバのログインユーザのパスワード>
Last login: Sun Dec 8 09:28:46 2024 from 159.XXX.XXX.XXX
これで、「最終的に接続したいサーバ」にログインできれば「トンネル」が作られているということ。
・・・いやぁ、面倒くさいな(笑)。
Cyberduck であればトンネリング SSH 接続の設定ができるみたいなんで、そっちにするか・・・(^^;;;