手動でパスワードを渡す必要なく、自動的に行う必要がありますrsync
。ssh
ssh
14 に答える
「sshpass」非対話型 ssh パスワード プロバイダー ユーティリティを使用する
Ubuntu の場合
sudo apt-get install sshpass
rsync コマンド
/usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p password ssh -o StrictHostKeyChecking=no -l username" src_path dest_path
スクリプト化されたsshログインには、パスフレーズなしのキーファイルを使用する必要があります。これは明らかにセキュリティリスクです。キーファイル自体が適切に保護されていることに注意してください。
rsync
環境変数RSYNC_PASSWORD
を使用するパスワードに設定するか、オプションを使用することにより、コマンドでのパスワード プロンプトを回避でき--password-file
ます。
私はそれを次のように動作させました:
sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir remote_user@remote_host:/remote_dir
公開鍵/秘密鍵を使用できない場合は、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 をパスワードに置き換える必要があります。このファイルが安全に保存されていることを確認してください。
sshキーを使用します。
とを見てssh-keygen
くださいssh-copy-id
。
その後、次のように使用できますrsync
。
rsync -a --stats --progress --delete /home/path server:path
rsync コマンドのパスワードを自動的に入力するのは困難です。問題を回避するための私の簡単な解決策は、バックアップするフォルダーをマウントすることです。次に、ローカルの rsync コマンドを使用して、マウントされたフォルダーをバックアップします。
mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password
rsync -a /mnt/source-tmp /media/destination/
umount /mnt/source-tmp
既に実装済みですが、
また、 expect実装を使用することもできます (Perl、Python で代替手段を見つけることができます: pexpect、paramiko など)。
私が最初に訪問したとき、公式の解決策(およびその他)は不完全だったので、数年後に戻ってきて、他の人が公開/秘密鍵ペアを使用するつもりでここに巻き込まれた場合に備えて、この代替アプローチを投稿しました。
これをターゲット バックアップ マシンから実行し、ソース バックアップからターゲット バックアップにプルします。
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' user@10.9.9.3:/home/user/Server/ /home/keith/Server/
これをソース マシンから実行し、ソース マシンからターゲット バックアップに送信します。
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ user@10.9.9.3:/home/user/Server/
また、ssh に代替ポートを使用していない場合は、以下のより洗練された例を検討してください。
ソースからターゲット バックアップにプルする、ターゲット バックアップ マシンからこれを実行します。
sudo rsync -avi --delete user@10.9.9.3:/var/www/ /media/sdb1/backups/www/
ソースからターゲットへのバックアップを送信するソース マシンからこれを実行します。
sudo rsync -avi --delete /media/sdb1/backups/www/ user@10.9.9.3:/var/www/
それでもパスワードの入力を求めるプロンプトが表示される場合は、ssh 構成をチェックインし/etc/ssh/sshd_config
、ソースとターゲットの各ユーザーがそれぞれの公開 ssh キーを持っていることを確認する必要がありますssh-copy-id user@10.9.9.3
。
(繰り返しますが、これはパスワードなしで ssh 鍵ペアを使用するためのものであり、ファイルを介してパスワードを渡すためのものではありません。)
Andrew Seaford によって投稿されたアイデアに従って、これは sshfs を使用して行われます。
echo "SuperHardToGuessPass:P" | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com:/mypath/ /mnt/source-tmp/ -o workaround=rename -o password_stdin
rsync -a /mnt/source-tmp/ /media/destination/
umount /mnt/source-tmp