2017-12-07 9 views
-2

私はsshコマンドを使用してサーバに接続し、それに渡したuseraddコマンドを実行しようとしています。 (エラーは発生していませんが)、/etc/shadowファイルのハッシュされたパスワードには塩分がありません(私はこれが欠けている部分だと考えています。)。いくつかの出力がSSHに渡されたコマンドで失われました

引用符が間違っているかどうかわかりません。しかし、サーバ上でこのコマンドを手動で実行すると問題なく動作するので、私はその拡張がうまくいかないと想定しています。

以下のコマンドは、bashスクリプト内で実行されている...

コマンド:

ssh [email protected]$host "useradd -d /usr/local/nagios -p $(perl -e 'print crypt("mypassword", "\$6\$salt");') -g nagios nagios && chown -R nagios:nagios /usr/local/nagios" 

*私はperlのワンライナー内部の二重引用符をエスケープすると、私はエラーを取得します:

Can't find string terminator '"' anywhere before EOF at -e line 1.

Usage: useradd [options] LOGIN

私はここで間違っていると思いますか?

答えて

1

コマンド全体を二重引用符で囲み、その中のすべてを正しくエスケープする代わりに、一重引用符を使用し、必要に応じて埋め込み一重引用符を処理する方が堅牢になります。 実際には、処理する埋め込みシングルクォートはありません。 埋め込みリテラル$のみが$6$saltにあります。このような場合には

+1

PerlはPerlスニペットで一重引用符または二重引用符を使用する必要がないので便利です。 'perl -e' print crypt(q {mypassword}、qq {$ 6 $ salt}}); ''そして、少し混乱させて残った空白を詰めることさえできるので、スクリプトをまったく引用する必要はありません。 – tripleee

+0

ありがとう@トライプル、それは確かにいくつかの単純化を可能にする – janos

+0

ありがとう、大いに感謝!私はuseraddから返されたエラーを受け取っています。エラーではありませんが、誤ったコマンドはuseraddヘルプ情報を返してからです。私は 'ssh user @ host 'useradd -d/usr/local/nagios -p $(perl -e" print crypt(q {mypassword}、q {$ 6 $ salt}); ")' -g nagios nagios'を試しました。 – Matt

0
echo "useradd -d /usr/local/nagios -p $(perl -e 'print crypt("mypassword", "\$6\$salt");') -g nagios nagios && chown -R nagios:nagios /usr/local/nagios" > /tmp/tempcommand && scp /tmp/tempcommand [email protected]:/tmp && ssh server1 "sh -x /tmp/tempcommand && finger nagios && rm /tmp/tempcommand" 

ssh "[email protected]$host" 'useradd -d /usr/local/nagios -p $(perl -e "print crypt(q{mypassword}, q{\$6\$salt});") -g nagios nagios && chown -R nagios:nagios /usr/local/nagios' 
は、私はいつも、私はコマンドセットを実行しているから、ローカル/リモートサーバー上のローカルファイルを持っていることを好みます。多くの "引用符をデバッグする時間"を節約します。私が上でやっていることは、最初にローカルの "one is"と "as as works"をローカルにファイルに保存し、それをscpでリモートサーバにコピーしてシェルで実行することです。 より安全な方法です(ファイルをコピーする必要はありません)。もう一度 - ローカルに保存し、-sオプションを使用してリモートbashに渡します。

echo "useradd -d /usr/local/nagios -p $(perl -e 'print crypt("mypassword", "\$6\$salt");') -g nagios nagios && chown -R nagios:nagios /usr/local/nagios" > /tmp/tempcommand && echo finger nagios >> /tmp/tempcommand && ssh server1 'bash -s' < /tmp/tempcommand 
+1

ようこそStackOverlfowへ。それは長い線です。あなたはその中で何が起こっているのか説明できますか? https://stackoverflow.com/help/how-to-answer – chicks

+0

@Matt WOW、293 characters!誰もそれを試して理解する時間はありません。 – zaph

関連する問題