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


111

私は何をする必要があるrsyncことにより、sshおよびのためのパスワードを渡すことを必要とせず、自動的にそれをしたいssh手動。

回答:


44

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

パスワードなしのsshアクセスの設定手順


9
コマンドのテキストにパスワードを入れる可能性はありませんか?
liysd 2010

3
簡単ではありませんが、sshにはそのためのオプションはありません
Mad Scientist

これは常に実行できるとは限らないことに注意してください(たとえば、多くのandroid sshサーバーの実装はかなり制限されています)。
Ponkadoodle、2015

@Ponkadoodle OPはサーバー側ではなく、クライアント側のリクエストに関するものです。ssh -iクライアント側で常に可能である必要があります。サーバーがすべてのキータイプ(ECDSAなど)をサポートしていない可能性があるということですか?ただし、これは大きな問題ではなく、を使用する場合のみssh-keygen -tです。何か不足していますか?
ジョナサンH

1
これは最初は面倒なように見えるかもしれませんが、これが正解です。パスワードは機密情報であるため、平文で保存したり、プログラムで不注意に使用したりしないでください。これがキーファイルの目的です。ちょうど学ぶIDファイル、rsync -eおよびssh -i
ジョナサンH

94

「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

4
私はこれがベストプラクティスではないことを知っていますが、キーベースの認証を行わない機能不全のSSHDを備えたNASを持っています。この答えは、自動バックアップパズルに欠けていたものでした。したがって、最後の回答として+1
Mike Gossmann 2013年

8
キーファイルを使用できないが、コマンドにパスワードを含めたくない場合は、それを一時ファイルに書き込んで、次のように含めることができますsshpass -p`cat .password` ssh [...]。次に、.passwordファイルを保護してchmod 400 .password、ユーザーだけがファイルを読み取れるようにします。
lutuh

5
完全性のために、リモート・サーバにssh'ingの場合には、src_path:パス、そうのような:サーバーであるべきであるserver01.mydomain.local:/path/to/folder
harperville

これは間違いなく正しい答えです!sshのマジックを使わずにスクリプトを作成できます。;)称賛@Rajendra
本物の

1
以来、-arsyncの上のスイッチが含まれて-rlptgoD:あなたはこのようなコマンドを短縮することができますrsync -az ...
Jannie Theunissen

24

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


41
移行

4
この答えはrsyncデーモンを使用しない限り役に立ちませんが、Googleがここに到達し、まさにそれが必要でした。私にとっては、rsyncdへの直接のrsyncが必要で、sshは必要ありませんでした。私はpassword-fileオプションを使用しただけで、スクリプトとしては完全に機能しました。
gregthegeek 14

14

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


3
これらのコマンドは私ので利用できませんRed Hat Enterprise Linux Server release 5.11 (Tikanga)
Kraへ

13

私はそれを次のように機能させました:

sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir  remote_user@remote_host:/remote_dir

remote_port_sshに設定されますか?実際の値のプレースホルダーのように見えます。
マックスウィリアムズ

6

sshキーを使用します。

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

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

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

sshでキーを使用する場合、次のように記述します。ssh u @ serv -i ./rsaしかし、rsyncでそれを行う方法は?
liysd 2010

2
キーを.sshディレクトリに入れて標準名(通常はid_rsa / id_rsa.pub)を付けると、rsyncによって自動的に取得されます。
Craig Trader

6

別の興味深い可能性:

  1. RSAまたはDSAキーペアを生成します(説明したとおり)。
  2. ホストに公開鍵を置く(すでに説明したように)
  3. 実行:
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回限りのパスワードなしのアクセス)に役立ちます。


5

次は私のために働きます:

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


2
-aはすでに-rlptgoDを意味しており、一般に、ここでコマンドラインを減らすと、はるかに役立ちます。
クリスチャン

4

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


2

私は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}"

2

私が最初に訪れたとき、公式のソリューション(およびその他)は不完全だったので、公開/秘密キーペアを使用するつもりでここに巻き込まれた場合に備えて、この代替アプローチを投稿するために数年後に戻ってきました。

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

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鍵ペアを使用するための代替アプローチであり、ファイルを介してパスワードを渡すためではありません。)


また、重要な副次的な注意点として、代替ポートの例では、sshを秘密鍵ファイルに送信し、ターゲットでコマンドを実行すると、公開鍵に対して認証が行われます。
oemb1905

-1

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.