サーバーが2つありますが、サーバーAそしてサーバーB。
現在私はシェルスクリプトを実行しています。サーバーAファイルを生成し、「宣伝する」到着するサーバーB。シェルスクリプトは cron で毎時間実行され、SUDO
権限が必要です。
しかし、設定の変更により、「プッシュ」このファイルのソースはサーバーA到着サーバーB、そして今私は必要です「引っ張る」このファイルのソースはサーバーB到着サーバーA。
お持ちですか?「正しい」リモートサーバーに接続し、高い権限を必要とするスクリプトを実行するには?しかし、シェルスクリプトにパスワードを書く必要はありません。サーバーB?
答え1
あなたはいくつかの選択肢があります。いくつかの提案があります:
証明書ベースの認証を使用してserverBからroot @ serverAに接続し、そのサーバーのルートコンテキストでスクリプトを実行します。
scp
その後、同じ証明書ベースの認証を使用して生成されたファイルを渡したり元に戻したりできますrsync
。欠点は、serverBのアカウントにroot@serverAへの無制限のアクセス権があることです。ただし、厳密に管理されている環境ではこれを許可できます。単一コマンド(スクリプト)の実行に接続を制限する証明書ベースの認証を使用して、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
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
serverAで定義されているTCPポートに接続し、スクリプトをトリガーしてルートとして実行するなど、より複雑な操作にはトリガーを使用します。
つまり、serverAのTCPポートにアクセスできる人は誰でもスクリプトを起動できるので、DDOSの問題を考慮してスクリプトの複数のインスタンスが同時に実行されないようにする必要があります。しかし、これにより必要がなくなります。どのserverAの対話型ルートアクセス -
sudo
。
答え2
に接続することができますサーバーBvia経由でssh
実行し、sudo
昇格した権限でスクリプトを実行します。sudo
パスワードを要求しないように設定できます。