通常のユーザーとして次のコマンドを実行すると、すべてがうまく機能します。
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
「キーパスワード」はSSHではなくSSHから来ることができますrsync
。sudo
SSH秘密鍵のロックを解除するにはパスワードが必要です。
パスワードなしでキーを使用することはあまりお勧めできませんので、スクリプトが root として実行される場合を考えてみましょう。ログインすると、スクリプトは常にrootとして実行されますか?ログイン後にパスワードを一度だけ入力できますか?
この場合、次のようなものを使用することをお勧めします。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を介して接続できます。