このトピックについて以前に質問したことを見ましたが、私が探しているものと一致するものが見つかりませんでした。
想像する:
System1とSystem2という2つのCentosシステムがあります。
System1のスクリプトは、ログインしていないシェルユーザー(user1)を使用してWebからファイルをダウンロードし、それをユーザーのホームディレクトリ(/home/user1)に保存します。
System2の別のスクリプトは、ログインしていないシェルユーザー(user2)を使用してsystem1からscpファイルを読み取り、いくつかの操作を実行します。
これらのユーザーは、rootユーザーを使用して両方のシステムにスクリプトをインストールしたときに作成されました。
以下は、user1とuser2を生成する仕様ファイルの断片です。
getent group user1>/dev/null || groupadd -r user1
getent passwd user1>/dev/null || \
useradd -r -g blacklist -m -s /sbin/nologin \
-c "the user is created as it downaloads the conent from web" user1
exit 0
挑戦:パスワードのないscpを実行する従来の方法は、鍵ペアを作成してリモートシステムに公開鍵をコピーすることです。ただし、ログインできない場合は、ユーザー固有のキーを生成してリモートサーバーにコピーするにはどうすればよいですか?
この要件を処理する良い方法を教えてください。
答え1
レプリケーションにSCPプロトコルを使用することはRPMパッケージの機能要件であり、SCPには基本的なSSH認証が必要なため、次のオプションのみを想像できます。
生成されたRPMパッケージ内にSSHキーペアをハードコードします。これらのキーは、
ssh-keygen
セクション内で呼び出して生成すること%build
も、事前に生成してソースファイルにインポートすることもできます。以降は、~/.ssh/id_rsa
のように正しくインストールできます~/.ssh/authorized_keys
。ユーザーパスワードはRPMパッケージ内にハードコードされており、ダウンロードする
sshpass
ために使用されますSystem2
。ホストベースの認証で
user2
認証されました。このセクションの代替コマンドをSystem1
呼び出して、%post
ホストベースの認証をイネーブルにし、それに応じて設定~/.ssh/known_hosts
および~/.shosts
アーカイブできます。
各選択肢には利点とセキュリティの問題があり、最適なオプションは環境ポリシーによって異なります。最良の答えを選択することはできません。
何らかの方法で認証設定を自動化しuser2@System2
たり、System1
パッケージをインストールした人にこれを行うように要求したインストール後のメッセージを生成する必要があります。実際には、両方のシステムに知られている一意の認証データを作成してコピーすることを含まないSystem2
アイデンティティチェック以外に代替手段がないと思います。System1