リモートサーバーからローカルコンピュータにダウンロードするためのbashスクリプトを開発しようとしています。私はrsyncを呼び出し、毎回パスワードを直接取得することを避けるべきです。以下はうまくいきます:
sshpass -p "my remote pw" rsync -r -n -t -v --progress -s myid@remote:/remote_path /local_path
問題はこれがどれほど安全ではないかです。より良い方法がありますが、実装するのに十分簡単ですか?ありがとう
答え1
少なくともマルチユーザー環境ではそれほど安全ではありません。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
できます(パスワードは暗号化されており、ロックを解除する暗号鍵はログインに使用したパスワードだと思います)。これにより、パスワードを入力する必要がなくなります。このような設定はいくつかありますが、残念ながら何をしたのか覚えていません。とにかくこれは少し多いかもしれませんね。