lftpの設定のsetコマンドについて【シェルスクリプト】
- 最終更新:
- 公開日:
シェルスクリプトでlftpを使う際に、どうしてもlftpのsetコマンドを使う必要が出てきます。
ネットで調べればなんとなく済んでしまうことが多いのですが、いまいちピンとこないので、分かる範囲で調べてまとめておくことにしました。
内容としては、FTPSを使うためにSSLあたりの設定が中心となります。
実践した環境は、LinuxのDebian9、lftp4.7.4です。
デフォルトと現在の設定を確認する
lftpでsetコマンドを使って設定を変更する際には、そもそも現在の設定がどうなっているのかをチェックしつつ進めたいところです。
また、デフォルトの設定を知りたい場合もあるでしょう。
これらは、lftpを起動した上で操作します。
起動はコマンドで「lftp」と入力するだけです。
ここではsetコマンドのオプションとして「-a」と「-d」をつけるだけです。
#現在の設定を表示する
$ lftp
lftp:~> set -a
#デフォルトの設定を表示する
lftp:~> set -d
設定項目はものすごく多く、ズラッと表示されます。
設定変更してみてから、「-a」で反映されているかチェックしてみると良いでしょう。
設定の仕方を使い分ける
lftpのsetコマンドを使うには、いくつかの方法があり、筆者なりの使い分け方を書いておきます。
全体として設定しておくか、個別で行う場合には、一行ワンラインで書くか、ヒアドキュメントで書くかといったところでしょうか。
全体設定したいなら設定ファイル【lftprc】
いつも同じにしておきたい設定は、lftpの設定ファイルを作成しておくと便利です。
自分のパソコンのホームフォルダ直下(他の設定ファイルもあるはずです)に、「.lftprc」というファイル名で、隠しファイルを作成します。
そのファイルに、セットコマンドを書き並べていくだけです。
#「/home/account/.lftprc」の書き方
set ftp:ssl-auth TLS
set ftp:ssl-force yes
set ftp:ssl-allow yes
set ftp:ssl-protect-list yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-fxp yes
過不足があるかもしれませんが、とりあえず上記は、できる限りFTPSで通信する場合の例です。
それぞれの設定については、下の方で説明します。
ヒアドキュメントでsetの個別設定
lftpの処理をスクリプトにまとめてヒアドキュメントで書けば、その都度、setで設定を変更できます。
下記だとlftp上でサーバーに接続する「open」の前に、設定変更ができることになります。
#ヒアドキュメントで
$ lftp <<EOF
set ssl:verify-certificate no
set ftp:list-options -a
open -u user,pass ftp-adress
ls
quit
EOF
「ls」はファイル等を表示させるコマンドです。
それぞれの設定については、下の方で説明します。
オプション「-e」でsetの個別設定
lftpでワンラインでスクリプトを書いてサーバに接続する際にも、オプション「-e」を使えば、設定を変更して接続することができます。
#一つsetを使う場合
$ lftp -e 'set ftp:list-options -a' -u user,pass ftp-adress
#複数setを使う場合
$ lftp -e 'set ssl:verify-certificate no; set ftp:list-options -a' -u user,pass ftp-adress
「-e」は複数つけると最後のものだけが読み込まれるようで、上記のように「;」で区切って複数の処理を書くと上手くいきました。
setコマンドのヘルプと設定の内容
setコマンドの使い方はともかく、それぞれの設定項目がどんな意味があるのかについては、個別に調べるしかなさそうです。
以下は、setのヘルプとlftpの詳細マニュアルの表示の仕方です。
#setのヘルプ(lftp上)
$ lftp
lftp:~> help set
#lftpの詳細マニュアル(通常コマンドで)
$ man lftp
長いlftpマニュアルのうち、コマンドsetとは場所が違っていて、設定項目については最後の方のSettingの場所で掲載されているので、注意が必要です。
SSLなどの設定項目について
setの項目はとても多いので、ここではサーバー接続の際にFTPS(SSL通信)で行う設定例について、関係がありそうなものを抽出してみます。
通信内容にもよるでしょうが、一番重要なのはパスワードの暗号化でしょうか?
過不足などがあるかもしれませんが、その辺はご了承下さい。
- 「ftp:ssl-auth TLS」AUTHコマンドをTLSに設定する。
- 「ftp:ssl-force yes」サーバーがSSLをサポートしていないときにはパスワードを送信しない。
- 「ftp:ssl-allow yes」SSLでの接続を試す。
- 「ftp:ssl-protect-list yes」ファイルリストの送信のためにSSL接続を要求する。
- 「set ftp:ssl-protect-data yes」データの送信にSSLを要求する。処理は重くなる。
- 「ftp:ssl-protect-fxp yes」FXPモードのFTPサーバー間のデータ転送にSSL接続を要求する。
他に、上の方で例として記載した設定項目についても書いておきます。
- 「ssl:verify-certificate no」SSL証明をチェックしない。(接続先が安全だと分かっているが、エラーが出るというような場合に)
- 「ftp:list-options -a」(ファイル名の最初に「.」のついた)隠しファイルも表示する。
マニュアル上では「true」という表現の設定も、「set -d」では「yes/no」で表示されているので、私は「yes」で設定しています。