web-dev-qa-db-ja.com

パスワードのプロンプトなしでrsync、sshpassを使用、それはどれほど安全ではありませんか?

リモートサーバーからローカルマシンにダウンロードするbashスクリプトを開発しようとしています。私はrsyncを呼び出しますが、毎回自分でパスワードを指で触れないようにする必要があります。次の作品:

 sshpass -p "my remote pw" rsync -r -n -t -v --progress -s myid@remote:/remote_path /local_path

質問は:それはどれほど危険ですか?より良い方法はありますが、実装するのに十分簡単です。ありがとう

1
mario

これは、少なくともマルチユーザー環境では、あまり安全ではありません。 sshpassのドキュメントによると:

-pオプションは、sshpassのすべてのオプションの中で最も安全性が低いと見なす必要があります。すべてのシステムユーザーは、単純な「ps」コマンドを使用してコマンドラインでパスワードを確認できます。

次に、スクリプトにパスワードをプレーンテキストで保存するという問題があります。そうする場合は、少なくとも適切な権限(700など)を設定していることを確認してください。

可能であれば、キーベースの認証を使用する必要があります。コンピュータに保存されている間にキーファイルが危険にさらされる可能性を減らすための予防策を講じる必要がありますが、実行中のコマンドがパスワードを漏らす問題を排除し、追加のボーナスとして、秘密鍵ははるかに強力/困難になる可能性がありますパスワードよりもクラックする。作業を簡単にするために、~/.ssh/configに次のようなエントリを作成できます。

Host mysite.com
    HostName mysite.com
    Port 22
    User me
    IdentityFile ~/.ssh/id_mysite.key

上記のようなエントリを使用すると、コマンドを次のように簡単に変更できます。

rsync -r -n -t -v --progress -s mysite.com:/remote_path /local_path

必須ではありませんが、すべてのキーを~/.sshに保持することをお勧めします。これは、キーが浮かんでいる可能性のある場所を制限し、.sshディレクトリには通常、デフォルトでより厳しい権限が設定されているためです。また、すべてのキーファイルのアクセス許可を600に設定したので、これを~/.ssh内のデフォルトのファイルアクセス許可として設定することを検討してください。これにより、利便性が向上し、将来のある時点でchmodを忘れる可能性が低くなります。

最後に、さらにセキュリティを強化したい場合は、秘密鍵をパスワードで保護し、ログイン時にseahorseのようなロックを解除することができます(パスワードは暗号化されており、パスワードのロックを解除するための暗号化キーがパスワードです)ログインに使用します)。このように、パスワードを入力する必要はありません。私はこのような設定をいくつか持っていますが、残念ながら、私がそれをどのように行ったかを正確に思い出せません。とにかく、それはおそらくやり過ぎです。

2
Paul Nordin