web-dev-qa-db-ja.com

パスワードプロンプトを要求せずにrsyncを自動化する方法

Rsyncタスクをcronジョブとして自動化したいと思います。パスフレーズが必要なため、cronジョブを実行できません。 rsyncコマンドと一緒にパスフレーズを指定する必要があります。そうしないと、パスフレーズをファイルに保存して、そこから読み取ります。私のコマンドは次のようになります。

rsync -aPe "ssh -i ' . $server->{'ssh_key'} . '" ' . $server_lock_dir;

では、パスワードはどこに置くのですか?

12
Rijosh K

これを行う必要はありません。sshキーのペアを設定し、公開キーをリモートシステムの.sshディレクトリに配置するだけです。

次に、これを行うだけです。

rsync -a -e ssh /local/path/ server:/remote/path/

(ご了承ください -e sshはかなりの数年前からデフォルトになっているので、非常に古いバージョンを使用している場合を除いて、おそらく省略できます。)

キーの設定に関する「ハウツー」ガイドがあります ここ

15
Paul R

これをcronから機能させたい場合は、いくつかの可能性があります。

  • パスワードなしのsshキーを設定する-あまり安全ではない
  • パスワードなしのsshキーを設定しますが、authorized_keysファイルでそれらをssh ForceCommandと組み合わせて、そのsshキーで実行できるコマンドを制限します。 「sshForceCommand」でmansshd、googleを参照してください
  • パスワード付きのsshキーを設定しますが、それらをキーチェーンと組み合わせて、セッション間でキーをメモリに保持します。私はこれについてブログ投稿を書きました: ssh、ssh-agent、keychain、cron notes
5
Sonia Hamilton

ファイルをリモートでコピーする場合:

  1. ローカルマシンにリモートマシンにログインできる公開鍵があることを確認してください(この場合、私のsshキーは「/home/myaccount/.ssh/id_rsa」です。
  2. リモートと同期するローカルフォルダを指定します。私の場合は「/ home/myaccount/mysourcefolder」です。
  3. リモートサーバーの宛先フォルダーのフルパスを指定します。私の場合はremoteaccount @ remoteserver: "/ home/remoteaccount/mydestinationfolder /"

注意:

  • --progressは、コピーされる各ファイルの進行状況を表示します
  • -amysourcefolder内のすべてのファイルを再帰的に転送する
  • -v冗長性
  • -zは、小さなファイルのデータ部分を圧縮します

私のコマンドは次のようになります。

rsync -avz --progress -e "ssh -i /home/myaccount/.ssh/id_rsa"/home/myaccount/mysourcefolder remoteaccount @ remoteserver: "/ home/remoteaccount/mydestinationfolder /"

4
mukulu