引用された SSH コマンド

引用された SSH コマンド

奇妙なエラーが発生しましたが、何も見つかりませんでした。次のコマンドを使用してユーザーの説明を変更したいと思います。

$ 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スペースで区切られます。パラメータはsshsudoおよびであるusermodため-c、リモートシェルでコマンドを表示できます。New Commentuser

sudo usermod -c New Comment user

usermodCommentユーザー名と偽の追加パラメータで解決されますuser

コメントが文字列として処理されるように、リモートシェルに引用符を渡す必要があります。最も簡単な方法は、リモートコマンド全体を一重引用符で囲むことです。このコマンドに一重引用符を使用する必要がある場合は、使用してください'\''

ssh "$i" 'sudo usermod -c "Jack O'\''Brian" user'

呼び出しを繰り返してエラーを無視する代わりに、sshpssh、mussh、Clustershなどの複数のサーバーでコマンドを実行するように設計されたツールを使用してください。より多くのサーバーでSSHを介したコマンド実行の自動化

おすすめ記事