通常のユーザーとして次のコマンドを実行すると、すべて正常に動作します。
fabio@myclient:~$ rsync -rv myserver:~/backup /home/fabio/backup/
ユーザーの操作なしでも動作しますが、root として実行されるスクリプトで実行する必要があるため、次の操作を試しました。
root@myclient:~# sudo -u fabio rsync -rv myserver:~/backup /home/fabio/backup/
また、次のことも試しました:
root@myclient:~# su - fabio -c "rsync -rv myserver:~/backup /home/fabio/backup"
どちらも動作しますが、「キーのパスフレーズ」を尋ねられます。これを回避できますか?
答え1
「キーのパスフレーズ」は、rsync
またはではなく SSH から来ている可能性がありsudo
、これは秘密 SSH キーのロックを解除するためのパスフレーズを要求しています。
パスフレーズなしでキーを使用することはお勧めしませんので、スクリプトが root として実行される状況を考慮してください。スクリプトは、ログイン後しばらくしてから常に root として実行されますか? ログイン後しばらくしてからパスフレーズを 1 回入力しても問題ありませんか?
このような場合は、次のようなものを使用することをお勧めします。keychain
スクリプトが root として実行されている間、ユーザーとして起動された ssh-agent がスクリプトによって使用されるようにします。ログイン後にパスフレーズを一度だけ入力すればよく、その後の呼び出しでは操作が不要になるように設定できます。
そうでない場合、スクリプトを対話型認証なしで自律的に実行する必要がある場合は、バックアップ スクリプト専用のキー ペアを生成し、リモート エンドで別のユーザーとして認証する (つまり、 ではなく、たとえば ) か、リモート エンドfabio
のファイル内の引数を使用して制限する(ただし、これは環境変数を確認する必要があるため、少し複雑です。 を参照してくださいfabio-backup
)ことで、スクリプトの実行を制限することを検討してください。command=
.authorized_keys
SSH_ORIGINAL_COMMAND
承認されたキー(5)詳細については)
答え2
SSH 秘密鍵はパスフレーズによって保護されています。(ログインした)ユーザーとして手動で実行すると、パスフレーズ キーストアをかつて保存した SSH エージェントが使用されます。
ただし、無人で実行すると、これは起こりません。結局のところ、ユーザーはログインしていない可能性があります (したがって、キーストアは利用できません)。常に機能させるには、SSH 秘密キーからパスフレーズを削除する必要があります (ssh-keygen -p
ユーザーとしてログインしている場合はfabio
、新しいパスフレーズを入力するために Enter キーを押すだけで、パスフレーズは削除されます)。
セキュリティに関する注意: 秘密鍵がパスフレーズで保護されていない場合、アカウントにアクセスできる人は誰でもfabio
、その鍵を許可している他のホストに SSH 接続することができ、最初にユーザーからパスフレーズをスニッフィングする必要がありません。