web-dev-qa-db-ja.com

パスワードを要求せずに、公開鍵認証を使用せずにrsyncするにはどうすればよいですか?

パスワードを要求せずにrsyncを実行する必要があります。

rsyncのマンページで、コマンドライン引数としてパスワードを指定できないことがわかりました。
しかし、変数RSYNC_PASSWORDを介してパスワードを指定できることがわかりました。

変数をエクスポートしようとしましたが、rsyncはパスワードを要求し続けます。

export RSYNC_PASSWORD="abcdef"
rsync [email protected]:/abc /def

何が悪いのですか?

ご検討ください:

つまり、RSYNC_PASSWORDアプローチを機能させる必要があります。 :-)

52
Dor

このパスワード環境変数は、rsyncプロトコルを使用する場合にのみ使用されるようです。

rsync rsync://[email protected]:/abc /def

これを機能させるには、rsyncもデーモンとして実行する必要があります(--daemonオプション)。これは、多くの場合inetd.confを使用して行われます。

このプロトコルを使用する場合、abc/etc/rsyncd.confで定義されたターゲットに対応する必要があります。ユーザー名はこのターゲットのauth users行にあり、パスワードファイルはsecrets fileオプションで指定する必要があります。

次の形式でユーザー名とパスワード間のマッピングを含むのは、このシークレットファイルです。

username:password

また、RSYNC_PASSWORD環境変数を使用して指定できるのはこのパスワードです。

13
brm

rsyncデーモンがターゲットマシンで実行されておらず、ローカルマシンの全員にパスワードを公開する必要がない場合( コマンドラインで誰かがパスワードを使用しないのはなぜですか? )、sshpassを使用できます:

 sshpass -p "password" rsync [email protected]:/abc /def

コマンドの先頭のスペースに注意してください。bashシェルでは、これによりコマンド(およびパスワード)が履歴に保存されなくなります。絶対に必要な場合を除いて、RSYNC_PASSWORD変数の使用はお勧めしません(この回答に対する以前の編集に従って)、履歴の保存を抑制するか、少なくとも履歴を消去することをお勧めします。さらに、tput resetを使用して、端末の履歴をクリアできます。

72
Graeme

標準のSSH IDを使用して、パスワードなしのログインを実行できます。 ~/.ssh/id_rsaなどがある場合、これはデフォルトで処理されますが、承認済みキーペアの秘密キーへの独自のパスをハードコードすることもできます。

これにより、パスワードを公開せずにバッチ処理/スクリプト作成が可能になり、秘密鍵が危険にさらされた場合は、公開鍵をターゲットサーバーから削除できます。

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nullなどの引数を追加して、リモートホストキーの検証を強制しないこともできます。 !注意-これは攻撃者を攻撃し、一般的な悪い習慣です!

16
Eddie

スクリプト作成に非常に役立つのは、--password-fileコマンドラインオプション。

  • Rsync_passという空のファイルを作成します
  • このファイルにパスワードを書き込む(それ以上)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

これはスクリプティングに使用でき、パスワードをシステム変数にエクスポートするよりも安全です。

13

この投稿のコメントに触発されてスクリプトを書いたので、ここから別のインスピレーションの源として投稿します。私の要件は、リモートでのrsyncd、パスワードログイン、履歴またはコマンドラインでのパスワードの露出なしでした。実際にはそれほど難しくありません。

#!/bin/bash

Host=mymachine.mydomain.com
USER=fms
LOCAL=/home/fms/Progetti/MyProject/src

read -s -p "Password for $USER@$Host: " SSHPASS
echo

sshpass -e rsync -i -r --checksum --delete --chown=nginx:nginx -e "ssh -o PreferredAuthentications=password" $LOCAL/lavori_senato $USER@$Host:/var/www/drupal/test/web/modules/custom

最初に公開鍵を試行しないように、sshのデフォルト構成を変更する必要がありました。 echoの後のreadはフォーマットのほんの一部です。これは、-sを使用しても、行の終わりが出力されず、rsyncの出力がパスワードプロンプトと重複するためです。