rootとしてリモートサーバーで変更を実行する方法


8

リモートマシンでrootとして変更を行わずにローカルマシンからスクリプト/コマンドを実行する方法があるかどうか疑問に思いますか?

いくつかの背景

カピストラーノ経由でいくつかのタスクをセットアップしようとしていますが、sudoアクセスが必要です。約30台以上のサーバーがあり、手動で更新/etc/sudoersするのは面倒なので、このファイルをリモートで更新する方法があるかどうか疑問に思っていましたか?


リモート操作が可能なファブリックを使用できます。fabric.contrib.files.sedmethod を使用すると、並行して対話することなく同じことができます。
lcipriani 14

30台のサーバーを管理している場合は、SaltStack
Wayne Werner

回答:


18

bashリモートシステムで実行してスクリプトをフィードすることにより、ローカルスクリプトをリモートで実行できます。

$ ssh user@host 'bash -s' < script.sh

編集する

sudoリモートマシンでの使用が必要なコマンドを実行するには、ssh's -toptionを使用してコマンドをに渡しますssh。この-tオプションは、疑似ttyを割り当て、が実行するコマンドをユーザーが操作できるsshようにします(パスワードの入力など)。sudo

$ ssh user@host -t 'sudo foo'

シェルリダイレクトではを使用するときにファイルを書き込むことができないためsed、この方法を使用してファイルを変更する>ことはリダイレクトよりも推奨されますsudo。さらに、sedコマンドに渡されるすべての変数は、エスケープする必要がありますssh

$ ssh user@host -t 'sudo sed -i "\$a text to insert" /path/to/file'

すべてを自動化するには:

#!/bin/bash
SERVERS=( server1 server2 server3 )

for HOST in ${SERVERS[@]}; do 
    ssh user@${HOST} -t 'sudo sed -i "\$a text to insert" /path/to/file'

    if [[ $? -ne 0 ]]; then
        echo "ERROR: $HOST did not complete"
     else   
        echo "$HOST complete"
    fi   
done

スクリプトとすべてに感謝しますが、それは本当に私の質問に答えません。/etc/sudoersroot権限のためにファイルを変更したい場合、失敗します。
kaizenCoder 2014

@aspiringCodeArtisan回答の編集を見る
クリーク

こんにちは、それでも、sudo私が理解しているところから設定されているパスワードの入力を求められます/etc/sudoers
kaizenCoder 2014

1
@aspiringCodeArtisanアカウントsudoにこれらのマシンに対する権限がない場合、変更/etc/sudoersするには、sshを使用してとしてログインする必要がありますroot。したがって、コマンドは次のようになりますssh root@host -t 'sed -i "\$a text to insert" /path/to/file'
クリーク14

root sshログインはデフォルトで無効になっているため、オプションではありません。不可能を求めているのではないでしょうか。
kaizenCoder 14

1

このteeコマンドは、ファイルのリダイレクトに関するsudoの制限を回避するのに役立つことがわかりました。sedを使用すると、文字のエスケープ要件のためにイライラすることがわかりました。

これは、クラスタ内のすべてのマシンのホストを/ etc / hostsにリモートで追加するために使用したコマンドです。

for i in {1..10}; do ssh ubuntu@10.1.1.$i -t "echo '10.1.1.1 dev-1    
10.1.1.4 dev-4
10.1.1.3 dev-3
10.1.1.2 dev-2
10.1.1.6 dev-6
10.1.1.8 dev-8
10.1.1.5 dev-5
10.1.1.10 dev-10
10.1.1.9 dev-9
10.1.1.7 dev-7' | sudo tee -a /etc/hosts >/dev/null"

各反復の出力は次のようになります。

0+1 records in
0+1 records out
255 bytes (255 B) copied, 4.1338e-05 s, 6.2 MB/s

このSUの答えは、私の最終的なソリューションを構築する上で極めて重要でした:https : //superuser.com/a/1026359/587485


1

複数のコマンドまたはリダイレクトを実行する必要がある場合は、次の構文を使用する必要があります。

ssh server.com "sudo sh -c 'ps aux | grep jav > /root/1.txt'"

0

sudoersファイルを変更する前に、直接のroot passwdまたはユーザーIDのsudoルール設定を介して、何らかのルートレベルのアクセス権をすでに持っている必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.