8

fabricUbuntu 10.4を使用してリモートボックスでパスワードを更新する方法が必要です。

私は次のfabfile.pyようになると思います:

def update_password(old_pw, new_pw):
    # Connects over ssh with a public key authentication
    run("some_passwd_cmd --old %s --new %s" % (old_pw, new_pd))

残念ながら、私が知っている唯一のコマンドでパスワードを変更できるのpasswdpasswd.

Ubuntu 10.4でユーザーのパスワードを変更するには、どのコマンドを使用できますfabricか?

EDIT:私は見てきたがusermod -p、それはうまくいくかもしれないが、マニュアルページでは推奨されていない.

編集:何らかの理由usermod -pで、ファブリック上でも機能していませんでした。

同様に、問題を解決したmikejの回答の(やや安全でない)バリエーションを試しました:

# connecting & running as root.
from fabric.api import *
from fabric.contrib import files

files.append("%s\n%s" % (passwd, passwd), '.pw.tmp')
# .pw.tmp:
# PASSWD
# PASSWD

run("passwd %s < .pw.tmp" % user)

run("rm .pw.tmp")

これは非常にエレガントなソリューションではありませんが、機能します。

読んでくれてありがとう。

ブライアン

4

5 に答える 5

14

たとえば、新しいパスワードと古いパスワードをpasswd使用してフィードできますecho

echo -e "oldpass\\nnewpass\\nnewpass" | passwd

( の-eオプションはecho、バックスラッシュ エスケープの解釈を有効にするため、改行はそのように解釈されます)

于 2010-06-20T19:30:06.220 に答える
11

usermodトリックは、と Python の組み合わせを使用しcryptてパスワードを変更することです。

from crypt import crypt
from getpass import getpass
from fabric.api import *

def change_password(user):
    password = getpass('Enter a new password for user %s:' % user)
    crypted_password = crypt(password, 'salt')
    sudo('usermod --password %s %s' % (crypted_password, user), pty=False)
于 2011-02-28T02:29:27.027 に答える
5

Ubuntu11.04でchpasswdを使用しています

fabric.api.sudo('echo %s:%s | chpasswd' % (user, pass))

注:通常、このパターンは機能しません。

$ sudo echo bla | restricted_command

'echo'のみが昇格された特権を取得し、'restricted_command'は取得しないためです。

ただし、fabric.api.sudoがshell = True(デフォルト)で調整されると、fabricは次のようにコマンドをアセンブルするため、ここでは機能します。

$ sudo -S -p <sudo_prompt> /bin/bash -l -c "<command>"

sudoは、root権限で実行される新しいシェル(/ bin / bash)を生成し、エスカレートされたシェルがコマンドを実行します。

sudoでパイプする別の方法は、sudoteeを使用することです

于 2011-06-18T04:09:08.257 に答える
3

興味深いことに、Solarisボックスのコレクションに対して同様のタスクを実行する必要があります(多数のユーザーを追加し、パスワードを設定します)。Solaris usermodには--passwordオプションがないため、過去にこれを行うためにExpectを使用しましたが、Expectスクリプトを作成するのは面倒な場合があります。

したがって、今回はPythonのcrypt.cryptを使用して、/ etc / shadowを直接編集します(もちろん、バックアップを使用します)。http://docs.python.org/release/2.6.1/library/crypt.html

コメント提供者は、passwdにパイプされたさまざまなエコー呪文を使用することを提案しています。passwdはstdinからの入力を無視し、インタラクティブttyからの入力のみを受け入れるようにプログラムされているため、これは機能しません。http://en.wikipedia.org/wiki/Expectを参照してください

于 2011-03-15T03:43:40.890 に答える