高い権限でシェルスクリプトをリモートで実行する方法

高い権限でシェルスクリプトをリモートで実行する方法

サーバーが2つありますが、サーバーAそしてサーバーB

現在私はシェルスクリプトを実行しています。サーバーAファイルを生成し、「宣伝する」到着するサーバーB。シェルスクリプトは cron で毎時間実行され、SUDO権限が必要です。

しかし、設定の変更により、「プッシュ」このファイルのソースはサーバーA到着サーバーB、そして今私は必要です「引っ張る」このファイルのソースはサーバーB到着サーバーA

お持ちですか?「正しい」リモートサーバーに接続し、高い権限を必要とするスクリプトを実行するには?しかし、シェルスクリプトにパスワードを書く必要はありません。サーバーB

ベストアンサー1

あなたはいくつかの選択肢があります。いくつかの提案があります:

  1. 証明書ベースの認証を使用してserverBからroot @ serverAに接続し、そのサーバーのルートコンテキストでスクリプトを実行します。

    scpその後、同じ証明書ベースの認証を使用して生成されたファイルを渡したり元に戻したりできますrsync。欠点は、serverBのアカウントにroot@serverAへの無制限のアクセス権があることです。ただし、厳密に管理されている環境ではこれを許可できます。

  2. 単一コマンド(スクリプト)の実行に接続を制限する証明書ベースの認証を使用して、serverBからroot @ serverAに接続します。

    コマンドがそのファイルを次に出力する場合標準出力sshスクリプトの完了後にファイルを転送することなく、serverBからroot @ serverAにセッションから直接キャプチャできます。 serverBのアカウントには、root@serverAへのランダムアクセス権はありません。

    ~root/.ssh/authorized_keysそのファイルでコマンドを実行するためにroot@serverAに必要なエントリの例はbake次のとおりです。

    ssh-rsa AAAAB3Nza...Fr9FvN me@roaima,command="/usr/local/bin/bake",no-agent-forwarding,no-port-forwarding,no-X11-forwarding
    
  3. serverBからserverAに接続し、sudoスクリプトを実行するために使用します。sudoシングルユーザーアカウントがパスワードなしでrootとしてスクリプトを実行できるように設定できます。

    このエントリを使用すると、/etc/sudoers「roaima」ユーザーは次のように引数を使用したり使用したりすることなく、名前付きスクリプトをrootとして実行できます。sudo /usr/local/bin/bake --fruit=apple,blackberry --type=pie

    roaima ALL = NOPASSWD: /usr/local/bin/bake
    
  4. serverAで定義されているTCPポートに接続し、スクリプトをトリガーしてルートとして実行するなど、より複雑な操作にはトリガーを使用します。

    つまり、serverAのTCPポートにアクセスできる人は誰でもスクリプトを起動できるので、DDOSの問題を考慮してスクリプトの複数のインスタンスが同時に実行されないようにする必要があります。しかし、これにより必要がなくなります。どのserverAの対話型ルートアクセス - sudo

おすすめ記事