2008-08-15 51 views

答えて

35

を:

(echo newpassword; echo confirmNewPassword) | smbpasswd -s 

はBTW:(oldpasswdエコー; newpasswdエコー)| smbpasswd -sは動作しません。

+5

-1これはまさにマークの答えです。変数名を変えるだけです。 – JorgeeFG

+6

+1をJorgeeFGにオフセットする。私はあなたが密接に読んでいるならば、新しい変数名は区別を含んでいると思います。マークの答えは、smbpasswdが古いパスワードと新しいパスワードを期待していることを意味しますが、この回答はsmbpasswdがパスワードとパスワードの確認を期待していることを示しています。 2番目の解釈は正しいので、私はマークの答えがこれよりも役に立たないと感じます。 – Matt

10

このような何か試してみてください:マークのおかげで、私は答えを見つけた

(echo oldpasswd; echo newpasswd) | smbpasswd -s 
17

私は私のスクリプトのいずれかで次のコマンドを使用します。エコーで

echo -ne "$PASS\n$PASS\n" | smbpasswd -a -s $LOGIN 

-e:\のように、エスケープシーケンスのn

-n:暗黙的に改行を追加しないでください

-a:最後のsmbpasswdで

で新しいユーザーを追加

-s:サイレント

+1

または 'echo -ne" $ PASS \ n "|ティー - | smbpasswd -a -s $ LOGIN'? –

+0

smbpasswdの-sは「パスワードのプロンプトに標準入力を使用」を意味し、「サイレント」ではありません。 – Michael

+0

@Michaelはhttps://www.samba.org/samba/docs/man/manpages/smbpasswd.8.htmlに従って "/dev/pttyの代わりに "サイレント"(プロンプトなし)と "stdinからの読み込み" –

1

これは、残念ながら二つの理由から望ましくない:ユーザーがパスワードでは「\ n」の組み合わせを使用している場合は、入力 2の不一致があるでしょう) 1)の場合システムにUNIXユーザーがいる場合、ユーティリティpsを使用するユーザーはパスワードを見ることがあります

より良い方法は、ファイルに名前を入れてファイルから読み込み、それらを読むためにpython pexpectを使用することです。下記のようなスクリプトがありますが、単純なスクリプトでpexpectの使い方を知るには十分です

#!/usr/bin/python 
#converted from: http://pexpect.sourceforge.net/pexpect.html 
#child = pexpect.spawn('scp foo [email protected]:.') 
#child.expect ('Password:') 
#child.sendline (mypassword) 
import pexpect 
import sys 
user=sys.argv[1] 
passwd=sys.argv[2] 
child = pexpect.spawn('/usr/bin/smbpasswd -a '+str(user)) 
child.expect('New SMB password:') 
child.sendline (passwd) 
child.expect ('Retype new SMB password:') 
child.sendline (passwd) 

は、試してみてください。./smbpasswd.py USERNAME1 'のF#の@を(& *(_ \ n895'

4

この echo 'somepassword' | tee - | smbpasswd -s

+2

ありがとう、fwiwそれは私がDockerfileで働くことができる唯一の構文です: 'RUN PASS = myrootpassword;エコー$ {パス} |ティー - | smbpasswd -a -s' – jamshid

+0

この答えは、Puppetのexecリソースで作業できる唯一の構文でも有益です。パペットがコマンドを見つけることができなかったため、パレンで始まるアプローチは失敗しました "(エコー"。ありがとう! – dbrewer

関連する問題