lftpでsftp
こんにちは、阿部です。
性懲りもなく技術部に舞い戻ってまいりました。
よろしくお願いします。
3月ですね、春ですね、花粉ですね。
ボクも花粉症でした。
過去形ですが、治ったというかマヒしたというか。
20代が一番症状が重かったような気がします。
くしゃみ&鼻水が止まらず、家の中でも点鼻薬を持ち歩いていた記憶があるのですが、
いつの間にか「あれ?そーいえば・・・」って感じで。。。
たぶん鼻がバカになったのだと思います。
今回は “lftp” というファイル転送コマンドを紹介します。
“lftp” の作者は Alexander V. Lukyanov 、ロシアの方みたいです。
本家サイト http://lftp.yar.ru/ を覗いてみると
2017年10月にリリースされた バージョン4.8.3 が最新版のようですね。
まずは自分の環境で lftpコマンド が使えるか確認します。
ボクの環境は CentOS 6.9 です。
[root@nabe5150 ~]# rpm -q lftp lftp-4.0.9-14.el6.x86_64 [root@nabe5150 ~]# which lftp /usr/bin/lftp
ちょっと古いですが バージョン4.0.9 が入ってます。
入っていなかったら “yumコマンド” で一発インストールできます。
どーしても最新版じゃなきゃイヤダッ!という人は
本家サイトにRPMバイナリが用意されているので、そちらをどーぞ。
“make install” したい人はソースコードをGETして頑張って下さい。
lftp” は一応FTPクライントですが、sshサーバに対して “sftp” できちゃったりします。
「最初からsftpすればイイじゃん」。。。ごもっともです。
ただですね、”lftp” で “sftp” したくなるときもあるんです。
cronで毎日バックアップ取ってファイルサーバへ “sftp” 転送したいときとか。
シェル書いてexpectしてる人も多いと思いますが、”lftp” を使えば1行で終わります。
コマンドラインで書くとこんな感じです。
[root@nabe5150 ~]# PASSWORD="hogehoge" ; /usr/bin/lftp sftp://abe:${PASSWORD}@192.168.1.152 -e "mput /home/abe/*.gz; bye"
※パスワード直書きしていますが、くれぐれもマネしないように!
何をしているか、分解してみます。
PASSWORD="hogehoge" ;
変数”PASSWORD” に sshユーザ”abe”のパスワード”hogehoge” を格納して
“;” の次に続くコマンドに引き渡し
/usr/bin/lftp
“lftp” を呼び出してsftpのプロキシ代わりに使います
sftp://abe:${PASSWORD}@192.168.1.152
変数”PASSWORD” を受け取って “192.168.1.152” へ sshユーザ”abe” で “sftp”接続
-e "mput /home/abe/*.gz; bye"
ローカルのgzファイル群 “/home/abe/*.gz” をまとめてアップロード
“-e” は “lftp” のコマンドオプション、”mput” はワイルドカード指定できるputコマンド
“mput”が完了したら “bye” でEXIT
「素直にsftpすればイイじゃん」。。。
続けます。
“lftp” は大量のパラメータを持っていて “/etc/lftp.conf” という設定ファイルを持っています。
パラメータ値を変更して固定したいときは”lftp.conf”で設定することをお奨めします。
次のコマンドを叩いてみて下さい。
[root@nabe5150 ~]# lftp -e "set -d; bye"
今、目の前を流れた連中が “lftp” のパラメータたちです。200個を超えます。
ボクが “lftp” で “sftp” するときに変更するパラメータは、だいたい次の3つです。
set net:max-retries 1000 ---> 1 set net:reconnect-interval-base 30 ---> 10 set sftp:connect-program "ssh -a -x" ---> "ssh -a -x -o ConnectTimeout=30"
パラメータの意味は、そこはかとなく通じると思いますので省略しますが
“set net:max-retries 1000” コイツだけは要注意です。
“lftp” は相手サーバに接続できなかったとき “1000回” も再接続に挑戦してくれます。
思い切って再接続回数を減らしましょう。
一時的にパラメータを変更したいときは、
“-e”オプションを付けてコマンドラインから投げることができます。
[root@nabe5150 ~]# PASSWORD="hogehoge" ; /usr/bin/lftp sftp://abe:${PASSWORD}@192.168.1.152 -e "set net:max-retries 1; set net:reconnect-interval-base 10; set sftp:connect-program \"ssh -a -x -o ConnectTimeout=30\"; mput /home/abe/*.gz; bye"
長いですね。あえて改行はしませんでした。
“-e”オプションダブルクォーテーション使うときはエスケープしないと暴れます。
すごくザックリとした紹介になってしまいましが、”lftp” はもっと使えるヤツなんです。
また機会があればミラーリングとかも取り上げてみたいと思います。
ではまた。