パスワードを要求せずにrsync
を実行する必要があります。
rsync
のマンページで、コマンドライン引数としてパスワードを指定できないことがわかりました。
しかし、変数RSYNC_PASSWORD
を介してパスワードを指定できることがわかりました。
変数をエクスポートしようとしましたが、rsync
はパスワードを要求し続けます。
export RSYNC_PASSWORD="abcdef"
rsync [email protected]:/abc /def
何が悪いのですか?
ご検討ください:
rsync
のみを使用する必要があり、他のソフトウェアは使用できませんつまり、RSYNC_PASSWORD
アプローチを機能させる必要があります。 :-)
このパスワード環境変数は、rsyncプロトコルを使用する場合にのみ使用されるようです。
rsync rsync://[email protected]:/abc /def
これを機能させるには、rsyncもデーモンとして実行する必要があります(--daemon
オプション)。これは、多くの場合inetd.conf
を使用して行われます。
このプロトコルを使用する場合、abc
は/etc/rsyncd.conf
で定義されたターゲットに対応する必要があります。ユーザー名はこのターゲットのauth users
行にあり、パスワードファイルはsecrets file
オプションで指定する必要があります。
次の形式でユーザー名とパスワード間のマッピングを含むのは、このシークレットファイルです。
username:password
また、RSYNC_PASSWORD環境変数を使用して指定できるのはこのパスワードです。
rsync
デーモンがターゲットマシンで実行されておらず、ローカルマシンの全員にパスワードを公開する必要がない場合( コマンドラインで誰かがパスワードを使用しないのはなぜですか? )、sshpass
を使用できます:
sshpass -p "password" rsync [email protected]:/abc /def
コマンドの先頭のスペースに注意してください。bash
シェルでは、これによりコマンド(およびパスワード)が履歴に保存されなくなります。絶対に必要な場合を除いて、RSYNC_PASSWORD
変数の使用はお勧めしません(この回答に対する以前の編集に従って)、履歴の保存を抑制するか、少なくとも履歴を消去することをお勧めします。さらに、tput reset
を使用して、端末の履歴をクリアできます。
標準のSSH IDを使用して、パスワードなしのログインを実行できます。 ~/.ssh/id_rsa
などがある場合、これはデフォルトで処理されますが、承認済みキーペアの秘密キーへの独自のパスをハードコードすることもできます。
これにより、パスワードを公開せずにバッチ処理/スクリプト作成が可能になり、秘密鍵が危険にさらされた場合は、公開鍵をターゲットサーバーから削除できます。
rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
などの引数を追加して、リモートホストキーの検証を強制しないこともできます。 !注意-これは攻撃者を攻撃し、一般的な悪い習慣です!
スクリプト作成に非常に役立つのは、--password-file
コマンドラインオプション。
chmod 600 rsync_pass
rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory
これはスクリプティングに使用でき、パスワードをシステム変数にエクスポートするよりも安全です。
この投稿のコメントに触発されてスクリプトを書いたので、ここから別のインスピレーションの源として投稿します。私の要件は、リモートでの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の出力がパスワードプロンプトと重複するためです。