lftp

CentOSに元からインストールされているftpクライアント
ちょっと今回使ってみたのでレポ。
lftp君、意外と賢くってsftpとかhttpsとかの接続もサポートしてたりする。
って事で早速、sshサーバに対してsftpで接続してほにょほにょしてみたりした。

lftpのコマンドラインはこれ

lftp -e "mirror -R --only-newer --delete /SRC /DST && exit" sftp://REMOTE
ここで、/SRCはローカルディレクトリ
/DSTはリモートディレクトリ
REMOTEはリモートサーバなのだが、ここに秘密あり

普通にlftpでsftp接続するとユーザ名とパスワードを指定するかプロンプトで入力するかで対応できる。
けど、スクリプト化ですから入力なしでやります。
つまり、ssh接続においてパスワード無し認証でつなげます

まず、sshの鍵を作成して公開鍵をリモート側に転送して設定
その上でローカル側のsshを設定するのです

公開鍵を作成して
ssh-keygen -t dsa -N "" -f .ssh/XXXX
REMOTEサーバに転送して
scp .ssh/XXXX.pub USER@REMOTE:/home/USER
REMOTEサーバにsshログインして
ssh REMOTE -l USER
公開鍵を登録
[USER@REMOTE]$ touch .ssh/authorized_keys
[USER@REMOTE]$ chmod 600 .ssh/authorized_keys
[USER@REMOTE]$ cat XXXX.pub >> .ssh/authorized_keys
[USER@REMOTE]$ exit
一度接続テストしてみる
ssh REMOTE -l USER -i .ssh/XXXX
[USER@REMOTE]$ ←ズバッ!とパスなしで接続できればOK

で、ここで.ssh/configなる設定ファイルを作成する
lftpのsftp接続では接続に利用する秘密鍵ファイル名がid_dsaと固定されていてコマンドラインから変更することができないらしい。その代り、ssh側の設定を使えるので.ssh/configを設定するわけ。

vi .ssh/config
Host YYYY
  HostName 192.168.1.1
  Identityfile ~/.ssh/XXXX
  User USER

これで、sshコマンドおよびlftpコマンドでリモートホスト名としてHost行に登録した文字列が利用できる。
で、接続ユーザと秘密鍵を指定してあるのでその情報を持って接続してくれるのです

ssh接続の場合
ssh YYYY
lftp接続の場合
lftp sftp://YYYY

この状態にしておいて前述のコマンドはこうなる

lftp -e "mirror -R --only-newer --delete /SRC /DST && exit" sftp://YYYY

完成?!