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
完成?!