パスワードを smbpasswd にパイプする
-
08-06-2019 - |
質問
インストールプロセスを自動化するには、新しいパスワードを smbpasswd にパイプする方法を教えてください。
解決
マークのおかげで答えが見つかりました。
(echo newpassword; echo confirmNewPassword) | smbpasswd -s
ところで:(古いパスワードをエコー;Echo NewPassWd)| SMBPASSWD -Sは機能しません。
他のヒント
スクリプトの 1 つで次のものを使用します。
echo -ne "$PASS\n$PASS\n" | smbpasswd -a -s $LOGIN
エコーあり:
-e : のようなエスケープ シーケンス
-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#@(&*(_ 895'
Puppet 5.x Exec リソースに新しい Samba ユーザーを作成する必要がありましたが、さまざまな理由から上記のどれも機能しませんでした。幸いなことに、このかなり愚かに見えるコマンドは機能しました。
yes vagrant|head -n 2|smbpasswd -a -s vagrant
ここでのパスワードはもちろん「vagrant」です。