私は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
私はここで間違っていると思いますか?
PerlはPerlスニペットで一重引用符または二重引用符を使用する必要がないので便利です。 'perl -e' print crypt(q {mypassword}、qq {$ 6 $ salt}}); ''そして、少し混乱させて残った空白を詰めることさえできるので、スクリプトをまったく引用する必要はありません。 – tripleee
ありがとう@トライプル、それは確かにいくつかの単純化を可能にする – janos
ありがとう、大いに感謝!私はuseraddから返されたエラーを受け取っています。エラーではありませんが、誤ったコマンドはuseraddヘルプ情報を返してからです。私は 'ssh user @ host 'useradd -d/usr/local/nagios -p $(perl -e" print crypt(q {mypassword}、q {$ 6 $ salt}); ")' -g nagios nagios'を試しました。 – Matt