インストール プロセスを自動化できるように、新しいパスワードを smbpasswd にパイプする方法を教えてください。
7 に答える
マークのおかげで答えが見つかりました:
(echo newpassword; echo confirmNewPassword) | smbpasswd -s
ところで:(古いパスワードをエコーし ます;新しいパスワードをエコーします)| smbpasswd -s は機能しません。
スクリプトの 1 つで次を使用します。
echo -ne "$PASS\n$PASS\n" | smbpasswd -a -s $LOGIN
エコーあり:
-e : \n などのエスケープ シーケンス
-n : 最後に暗黙の改行を追加しない
smbpasswd を使用:
-a : 新しいユーザーを追加
-s : サイレント
次のようなことを試してください:
(echo oldpasswd; echo newpasswd) | smbpasswd -s
これを使って
echo 'somepassword' | tee - | smbpasswd -s
残念ながら、これは次の 2 つの理由から望ましくありません。1) ユーザーがパスワードに '\n' の組み合わせを使用すると、入力に不一致が生じます。2) システムに UNIX ユーザーがいて、ユーティリティを使用しているユーザーがいる場合。 ps にパスワードが表示される場合があります
より良い方法は、名前をファイルに入れてファイルから読み取り、python pexpect を使用してそれらを読み取ることですが、以下のようではありませんが、pexpect の使用方法を確認するには単純なスクリプトで十分です。
#!/usr/bin/python
#converted from: http://pexpect.sourceforge.net/pexpect.html
#child = pexpect.spawn('scp foo myname@host.example.com:.')
#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'