2017-05-03 6 views
0

私はrootが所有する既存のファイルに行を追加しようとしています。約100台のサーバーでこの作業を行う必要があります。そこで、すべてのIPとntp.txtファイルを追加して、追加する必要がある行を持つservers.txtを作成しました。私は次のスクリプトを実行していますが、私がしようとしていることを達成していません。誰かが訂正する必要があるものを提案してもらえますか?sudoアクセスでファイルに追加する

!/bin/bash 
servers=`cat servers.txt`; 
for i in $servers; 
do 
    cat ntp.txt | ssh [email protected]${i} sudo sh -c "cat >>ntp.conf"" 
done 
+1

rootとして既にログインしている場合、なぜsudoを使用する必要がありますか? – user2141130

+1

rootのホームディレクトリの 'ntp.conf'に追加したいのですか、'/etc/ntp.conf'に追加しますか? –

+0

ファイルのパスとは別に、それはokと思われます。 'ssh root @ $ i" cat >> /path/to/ntp.conf " ilkkachu

答えて

1

ここにいくつかの問題があります。私がそれらのすべてを見つけたのかどうかわからない。

  1. シバンラインは、有意で重大な#が欠けています。
  2. サーバ名を変数に読み込む必要はなく、メモリを浪費するだけでなく、潜在的な問題にさらされています。 https://mywiki.wooledge.org/DontReadLinesWithFor
  3. Unless you specifically require the shell to do whitespace tokenization and wildcard expansion on a value,二重引用符(または一重引用符で囲むこともできますが、これにより、依然として必要な変数拡張は禁止されています)を参照してください。
  4. rootとしてログインしている場合は、明示的にsudoの必要はありません。
  5. sshあなたのためにシェルを実行します。あなたのコマンドを明示的にsh -cする必要はありません。
  6. 一方、可能であれば、ルートシェルの実行を避けたいとします。リダイレクトできるようにシェルを作成する必要がなくファイルに追加する一般的な方法は、を追加しないで上書きするだけです(-aを削除してください)。また、ファイルを標準出力に出力することは望ましくありません(副作用ではなく、副作用ではなく、そこに行こうとするものもあります)ので、テキストが画面にこぼれないように/dev/nullにリダイレクトすることがよくあります。
  7. useless use of catを避けたいのは、誰かがあなたにそれが役に立たないことを指摘することを避けることだけである場合のみです。
#!/bin/bash 
while read -r server; do 
do 
    ssh [email protected]"$server" sudo tee -a /etc/ntp.conf <ntp.txt >/dev/null 
done <servers.txt 

私はyouとしてログインするためのコードを変更するが、それはもちろん、あなたの環境に合わせて適応する必要があります何か。 (あなた自身としてログインしている場合は、通常はssh server明示的にユーザー名を指定する。無し)あなたのコメントを1として

、私はまた、先のファイル/etc/ntp.conf

サーバにより統制のとれたアプローチへのフルパスを追加しました設定はCFengine2のようなものを使って設定を管理することです。

関連する問題