何らかの方法によって逆方向のSSH接続経路を確保するのが一般的だと思いますが、別案としてZMODEMによる転送を提案してみます。
などの問題がありますが、一度準備をしてしまえば以降は手軽にファイルが転送できるようになります。
ZMODEMは、現在のSSH接続上を通してファイルを転送するので、新たな接続を張る事無くファイルが転送出来ます。
###必要なソフト
- lrzsz (両方のサーバ)
- GNU screen (受信側サーバ(サーバA)のみ)
サーバAにZMODEM受信プログラム、サーバBにZMODEM送信プログラムが必要になります。Unix系OSならばlrzszが一般的に用いられています。
また、サーバBからのZMODEM送信要求に対してZMODEM受信プログラムを起動する為の端末(または通信)プログラムが必要です。これはGNU screenを利用するのが楽でしょう。
どちらもLinuxの一般的なDistributionやFreeBSD等ならばOSのパッケージシステムでパッケージが提供されていると思います。
###事前準備
まずサーバAでZMODEM受信プログラムのコマンド名を確認します。環境によって各コマンドの頭に l が付く場合(lrz等)と付かない場合(rz等)があるので、whichコマンド等でどちらなのかを確認します。
bash
1server-a$ which lrz
2/usr/local/bin/lrz
3server-a$ lrz --version
4lrz (lrzsz) 0.12.20
GNU screenのデフォルト設定ではZMODEM受信プログラムとしてrzを使うようになっているので、受信コマンドがlrzだった時はlrzを使うように設定を変更する必要があります。
またZMODEM送信要求があった時に受信プログラムを起動するよう設定が必要となります。
以下の2行を ~/.screenrc に記述(追加)して下さい。
zmodem recvcmd "!!! lrz -vv -b -E"
zmodem catch
ZMODEM送信コマンドがrzだった場合はzmodem catch
のみ追加すればOKです。
###ファイル転送の手順
まずサーバAにて、転送したファイルを置いておくディレクトリに移動し、そこでscreenを起動します。
bash
1server-a$ cd /some/where/dir
2server-a$ screen
screenのスタートアップメッセージが出た場合はスペースキーを押して終了させて下さい。
screenを起動すると新しいシェルが起動されるので、サーバBにログインします。
サーバBでディレクトリを移動したりして、転送したいファイルが見つかったらlsz ファイル名
(もしくはsz ファイル名
)を実行します。
bash
1server-b$ lsz hogehoge.tar.gz
2rz
3
4
5
6
7
8
9:!!! lrz -vv -b -E
screenがZMODEM転送要求を捉えて、ZMODEM受信プログラムを起動する為のプロンプトを画面下部に表示しますので、そのままReturnキーを押すと転送が始まります。
そして転送が完了すると以下のように転送結果が表示されます。
bash
1server-b$ lsz hogehoge.tar.gz
2rz
3Receiving: hogehoge.tar.gz
4Bytes received: 4994460/4994460 BPS:1304975
5
6Transfer complete
7server-b$
転送されたファイルは、screenを起動したディレクトリに作成されます。
転送後は、また別のファイルを探してlsz(sz)コマンドで転送する事が出来ます。
全ての転送が終わったらサーバBからログアウトし、screen内で起動されたシェルを終了するとscreenも終了します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。