복붙노트

[PYTHON] 어떻게 파이썬 스크립트에서 리눅스에서 사용자 암호를 설정할 수 있습니까?

PYTHON

어떻게 파이썬 스크립트에서 리눅스에서 사용자 암호를 설정할 수 있습니까?

SFTP 액세스 설정을 자동화하려고합니다. 이 스크립트는 sudo 권한과 암호가없는 사용자로 실행 중입니다.

나는 이렇게 사용자를 만들 수있다 :

>>> import subprocess
>>> process = subprocess.Popen(['sudo', 'useradd', 'test'], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> process.communicate()
('', '')

다음으로 사용자의 비밀번호를 설정해야하지만 방법을 알 수는 없습니다. 여기 내가 시도한 것이있다.

>>> process = subprocess.Popen(['sudo', 'chpasswd'], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> process.communicate('test:password')

내 파이썬 프로그램에서는 아무런 영향을 미치지 않는다. 인터프리터 인터프리터에서는 첫 번째 줄 뒤에 잠근다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

우분투에서 파이썬 2.6을 실행 중입니다.

해결법

  1. ==============================

    1.통신을위한 문서에서는 통신 매개 변수를 통해 표준 입력으로 데이터를 보내는 경우 stdin = PIPE를 추가해야한다고 말합니다.

    통신을위한 문서에서는 통신 매개 변수를 통해 표준 입력으로 데이터를 보내는 경우 stdin = PIPE를 추가해야한다고 말합니다.

    http://docs.python.org/release/2.6/library/subprocess.html#subprocess.Popen.communicate

    이건 그냥 해골 코드입니다,하지만 여기에 또 다른 몇 가지 작은 의견이 있습니다, 그들이 사용의 경우 :

  2. ==============================

    2.자동화가 필요할 때 아래 코드를 시도하십시오.

    자동화가 필요할 때 아래 코드를 시도하십시오.

    from subprocess import Popen, PIPE, check_call  
    check_call(['useradd', 'test'])   
    proc=Popen(['passwd', 'test'],stdin=PIPE,stdout=PIPE,stderr=PIPE)  
    proc.stdin.write('password\n')  
    proc.stdin.write('password')  
    proc.stdin.flush()  
    stdout,stderr = proc.communicate()  
    print stdout  
    print stderr
    

    print 문은 선택 사항입니다.

  3. ==============================

    3.당신이 이것을 잊었 :

    당신이 이것을 잊었 :

    stdin=subprocess.PIPE
    

    프로세스에 데이터를 보내려면 표준이 필요합니다.

    따라서 완전한 진술은 다음과 같습니다.

    process = subprocess.Popen(['sudo', 'chpasswd'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
    

    통신 ( '암호')을 호출하십시오.

  4. ==============================

    4.우분투에서는 usermod를 사용하십시오.

    우분투에서는 usermod를 사용하십시오.

    class SomeClass
        def userPasswd(self, login, password):
            encPass = crypt.crypt(password)
            command = "usermod -p '{0:s}' {1:s}".format(encPass, login)
            result = os.system(command)
            if result != 0:
                logging.error(command)
            return result
    
  5. ==============================

    5.문제는 sudo에 -S 옵션을 잊었다는 것입니다.

    문제는 sudo에 -S 옵션을 잊었다는 것입니다.

  6. from https://stackoverflow.com/questions/4688441/how-can-i-set-a-users-password-in-linux-from-a-python-script by cc-by-sa and MIT license