奇妙なエラーが発生しましたが、何も見つかりませんでした。次のコマンドを使用してユーザーの説明を変更したいと思います。
$ sudo usermod -c "New Comment" user
これはサーバーにログインしたときに機能しますが、20台以上のサーバーで自動化したいと思います。通常、リストを使用してサーバーを介してループを実行してコマンドを実行できますが、この場合はエラーが発生します。
$ for i in `cat servlist` ; do echo $i ; ssh $i sudo usermod -c "New Comment" user ; done
serv1
Usage: usermod [options] LOGIN
Options:
lists usermod options
serv2
Usage: usermod [options] LOGIN
Options:
lists usermod options
.
.
.
このループを実行すると、コマンドを誤って使用したかのようにエラーが返されますが、単一のサーバーで正しく実行されます。
SSHのマニュアルページを見てタグを試しましたが、-t
何-t -t
も機能しませんでした。
perl -p -i -e
同様のループを使用してファイルを編集しました。
なぜループできないのか知っている人はいますか?
ベストアンサー1
SSH はシェルからリモートコマンドを実行します。パラメータリストの代わりに文字列をリモートシェルに渡します。コマンドに渡されたパラメーターはssh
スペースで区切られます。パラメータはssh
、sudo
およびであるusermod
ため-c
、リモートシェルでコマンドを表示できます。New Comment
user
sudo usermod -c New Comment user
usermod
Comment
ユーザー名と偽の追加パラメータで解決されますuser
。
コメントが文字列として処理されるように、リモートシェルに引用符を渡す必要があります。最も簡単な方法は、リモートコマンド全体を一重引用符で囲むことです。このコマンドに一重引用符を使用する必要がある場合は、使用してください'\''
。
ssh "$i" 'sudo usermod -c "Jack O'\''Brian" user'
呼び出しを繰り返してエラーを無視する代わりに、ssh
pssh、mussh、Clustershなどの複数のサーバーでコマンドを実行するように設計されたツールを使用してください。より多くのサーバーでSSHを介したコマンド実行の自動化