回答:
スクリプト化されたsshログインには、パスフレーズなしのキーファイルを使用する必要があります。これは明らかにセキュリティリスクです。キーファイル自体が適切に保護されるように注意してください。
ssh -i
クライアント側で常に可能である必要があります。サーバーがすべてのキータイプ(ECDSAなど)をサポートしていない可能性があるということですか?ただし、これは大きな問題ではなく、を使用する場合のみssh-keygen -t
です。何か不足していますか?
rsync -e
およびssh -i
。
「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
sshpass -p`cat .password` ssh [...]
。次に、.password
ファイルを保護してchmod 400 .password
、ユーザーだけがファイルを読み取れるようにします。
src_path
:パス、そうのような:サーバーであるべきであるserver01.mydomain.local:/path/to/folder
-a
rsyncの上のスイッチが含まれて-rlptgoD
:あなたはこのようなコマンドを短縮することができますrsync -az ...
rsync
環境変数RSYNC_PASSWORD
を使用するパスワードに設定するか、--password-file
オプションを使用することにより、コマンドのパスワードプロンプトを回避できます。
公開鍵/秘密鍵を使用できない場合は、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をパスワードに置き換える必要があります。このファイルが安全に保管されていることを確認してください。
Red Hat Enterprise Linux Server release 5.11 (Tikanga)
私はそれを次のように機能させました:
sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir remote_user@remote_host:/remote_dir
remote_port_ssh
に設定されますか?実際の値のプレースホルダーのように見えます。
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。
注:RSA / DSA秘密鍵である-i dsa_private_file
基本的に、このアプローチは@Mad Scientistによって記述されたものと非常に似ていますが、秘密鍵を〜/ .sshにコピーする必要はありません。つまり、アドホックタスク(1回限りのパスワードなしのアクセス)に役立ちます。
次は私のために働きます:
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
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などの選択肢があります)。
私はWindowsプラットフォームでこれを行うためにVBScriptファイルを使用しています。
set shell = CreateObject("WScript.Shell")
shell.run"rsync -a Name@192.168.1.100:/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' 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キーであることを確認する必要があります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