rsync
ごとにssh
を実行する必要があり、ssh
のパスワードを手動で渡す必要なく自動的に実行する必要があります。
スクリプト化されたsshログインには、パスフレーズなしのキーファイルを使用する必要があります。これは明らかにセキュリティ上のリスクです。キーファイル自体が適切に保護されていることに注意してください。
「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
環境変数RSYNC_PASSWORD
を使用するパスワードに設定するか、--password-file
オプションを使用すると、rsync
コマンドでパスワードプロンプトを回避できます。
公開/秘密キーを使用できない場合は、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 --partial --progress --rsh = "ssh -i dsa_private_file" Host_name @ Host:/ home/me/d。
注:-i dsa_private_fileこれはRSA/DSA秘密鍵です
基本的に、このアプローチは@Mad Scientistによって説明されたアプローチと非常に似ていますが、プライベートキーを〜/ .sshにコピーする必要はありません。言い換えれば、アドホックタスクに便利です(1回限りのパスワードなしのアクセス)
私はそうする:
sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir remote_user@remote_Host:/remote_dir
すでに実装済みですが、
expect の実装を使用することもできます(Perl、Pythonにはpexpect、paramikoなどの代替手段があります。)
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
次は私のために働く:
SSHPASS='myPassword'
/usr/bin/rsync -a -r -p -o -g --progress --modify-window=1 --exclude /folderOne -s -u --rsh="/usr/bin/sshpass -p $SSHPASS ssh -o StrictHostKeyChecking=no -l root" source-path myDomain:dest-path >&2
sshpass
をインストールする必要がありました
Windowsプラットフォームでこれを行うためにVBScriptファイルを使用していますが、非常にうまく機能します。
set Shell = CreateObject("WScript.Shell")
Shell.run"rsync -a [email protected]:/Users/Name/Projects/test ."
WScript.Sleep 100
Shell.SendKeys"Your_Password"
Shell.SendKeys "{ENTER}"
公式のソリューション(およびその他)は最初に訪れたときには不完全であったため、数年後、パブリック/プライベートキーペアの使用を意図して他の人がここに巻き込まれた場合に備えて、この代替アプローチを投稿しました:
ソースからターゲットバックアップにプルするターゲットバックアップマシンからこれを実行します
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' [email protected]:/home/user/Server/ /home/keith/Server/
ソースからターゲットバックアップに送信するソースマシンからこれを実行します
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ [email protected]:/home/user/Server/
また、sshに代替ポートを使用していない場合は、以下のよりエレガントな例を検討してください。
ソースからターゲットバックアップにプルするターゲットバックアップマシンからこれを実行します。
Sudo rsync -avi --delete [email protected]:/var/www/ /media/sdb1/backups/www/
ソースからターゲットバックアップに送信するソースマシンからこれを実行します。
Sudo rsync -avi --delete /media/sdb1/backups/www/ [email protected]:/var/www/
それでもパスワードの入力を求められる場合は、/etc/ssh/sshd_config
でsshの設定を確認し、ssh-copy-id [email protected]
で送信することで、ソースとターゲットのユーザーがそれぞれ他の公開sshキーを持っていることを確認する必要があります。
(繰り返しますが、これは代替アプローチとしてパスワードなしでsshキーペアを使用するためのものであり、notを渡すためですファイル経由のパスワード。)