パスフレーズでrsync
を使用するにはどうすればよいですか?私が見つけたグーグルの「ソリューション」はすべて、パスフレーズなしのキーを使用していますが、これは本当の選択肢ではないようです。
私は2つのubuntuサーバー12.04.2 LTSを実行しています。
通常のユーザーでrsyncを使用している場合、ssh-agentが探しているかもしれません。
Cronジョブでrsyncを使用中にこの問題に遭遇した場合。 cronジョブは、制限された環境でユーザーcronによって実行されます(SSH_AUTH_SOCKなどの一部のenv varが欠落しているため、ssh-agent 動作しません)。
ウォークスルーはkeychainを使用することです。キーチェーンは、ssh-agent環境変数をファイルに保持します。
したがって、最初にキーチェーンをインストールします。
次に、これらの行を.bashrc、.zshrc、または.profileファイルに追加します(sshキーと一致するように調整します)。
/usr/bin/keychain $HOME/.ssh/id_rsa
source $HOME/.keychain/${HOSTNAME}-sh
さらに、cronジョブを機能させるために、cronスクリプトの開始時に次の行を追加できます。
source $HOME/.keychain/${HOSTNAME}-sh
この記事の詳細: http://eli.thegreenplace.net/2013/10/08/some-notes-on-logging-and-ssh-access-from-cron-jobs /
rsync -Pavp --rsh="ssh -i YOUR_KEY" DEST USER@REMOTE:SOURCE
これに対する完璧な答えを https://stackoverflow.com/questions/3299951/how-to-pass-password-for-rsync-ssh-command で見つけました
それは私にとって完璧に機能しました。 kainjowが言うように、これはセキュリティ上のリスクですが、問題を解決します。
Kainjowによる回答:
公開/秘密キーを使用できない場合は、expectを使用できます。
#!/usr/bin/expect
spawn rsync SRC DEST
expect "password:"
send "PASS\n"
expect eof
if [catch wait] {
puts "rsync failed"
exit 1
}
exit 0
SRCとDESTを通常のrsyncのソースと宛先のパラメーターに置き換え、PASSをパスワードに置き換える必要があります。このファイルが安全に保存されていることを確認してください!