ログインしていないシェルユーザー間でSCPを実行するには?

ログインしていないシェルユーザー間でSCPを実行するには?

このトピックについて以前に質問したことを見ましたが、私が探しているものと一致するものが見つかりませんでした。

想像する:

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

関連情報