web-dev-qa-db-ja.com

RSAキーパスフレーズを使用してssh経由でrsyncを使用する方法は?

パスフレーズでrsyncを使用するにはどうすればよいですか?私が見つけたグーグルの「ソリューション」はすべて、パスフレーズなしのキーを使用していますが、これは本当の選択肢ではないようです。

私は2つのubuntuサーバー12.04.2 LTSを実行しています。

2
Pascal

通常のユーザーで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 /

4
Abd
rsync -Pavp --rsh="ssh -i YOUR_KEY" DEST USER@REMOTE:SOURCE
2
Vinz

これに対する完璧な答えを 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をパスワードに置き換える必要があります。このファイルが安全に保存されていることを確認してください!