web-dev-qa-db-ja.com

rsync SSHコマンドのパスワードを自動的に渡す方法は?

rsyncごとにsshを実行する必要があり、sshのパスワードを手動で渡す必要なく自動的に実行する必要があります。

96
liysd

スクリプト化されたsshログインには、パスフレーズなしのキーファイルを使用する必要があります。これは明らかにセキュリティ上のリスクです。キーファイル自体が適切に保護されていることに注意してください。

パスワードなしのsshアクセスをセットアップするための手順

43
Mad Scientist

「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
85
Rajendra

環境変数RSYNC_PASSWORDを使用するパスワードに設定するか、--password-fileオプションを使用すると、rsyncコマンドでパスワードプロンプトを回避できます。

24
Dexter

公開/秘密キーを使用できない場合は、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をパスワードに置き換える必要があります。このファイルが安全に保存されていることを確認してください!

12
kainjow

Sshキーを使用します。

ssh-keygenssh-copy-idを見てください。

その後、この方法でrsyncを使用できます。

rsync -a --stats --progress --delete /home/path server:path

別の興味深い可能性:

  1. rSAまたはDSAキーペアを生成します(説明どおり)
  2. ホストに公開キーを入力します(既に説明したとおり)
  3. 実行:
 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回限りのパスワードなしのアクセス)

6
xhudik

私はそうする:

sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir  remote_user@remote_Host:/remote_dir
5
andrey465

すでに実装済みですが、

expect の実装を使用することもできます(Perl、Pythonにはpexpect、paramikoなどの代替手段があります。)

3
Joao Figueiredo

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
3
Andrew Seaford

次は私のために働く:

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をインストールする必要がありました

3
mario

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}"
2
joseph.smeng

公式のソリューション(およびその他)は最初に訪れたときには不完全であったため、数年後、パブリック/プライベートキーペアの使用を意図して他の人がここに巻き込まれた場合に備えて、この代替アプローチを投稿しました:

ソースからターゲットバックアップにプルするターゲットバックアップマシンからこれを実行します

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を渡すためですファイル経由のパスワード。)

1
oemb1905