다음을 작성하여 Linux 서버에 SFTP 사용자를 만들었습니다. 이것을 구현하는 더 좋은 방법이 있습니까? 스크립트는 사용자가 이미 있는지 확인한 후 사용자 이름을 생성하여 작동합니다. 그런 다음 임의의 암호를 생성할지 또는 자신의 암호를 만들지 묻는 메시지를 표시합니다. 이후에 사용자 이름과 암호를 가져와 sftp를 통해 업로드 할 권한이있는 그룹에 새 사용자를 추가합니다. 나는 주로 os.system을 많이 사용하는 것에 관심이있다.Python을 사용하여 Linux에서 SFTP 사용자 만들기
#!/usr/bin/env python
import pwd
import string
import random
import os
from getpass import getpass
def generate():
global username
username = raw_input("Enter username: ")
try:
pwd.getpwnam(username)
print "Username already exists."
generate()
except:
pass_generator()
return username
def pass_generator():
global password
confirm = raw_input("Randomly generate password? (y/n): ")
if confirm == "y":
password = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(6))
elif confirm == "n":
p1 = getpass("Enter password: ")
p2 = getpass("Confirm password: ")
if p1 == p2:
password = p1
else:
print "Passwords do not match. Try again."
pass_generator()
else:
print "Type y for yes, n for no."
pass_generator()
def create_account(Username, Password):
os.system('sudo useradd -d /home/clients/%s -s /usr/libexec/openssh/sftp-server -g sftp-only %s' % (Username, Username))
os.system('sudo chown root:integration /home/clients/%s' % (Username))
os.system('sudo chmod 777 /home/clients/%s' % (Username))
os.system('echo %s:%s | sudo chpasswd' % (Username, Password))
def main():
generate()
create_account(username, password)
print "User %s has been successfully created with password %s" % (username, password)
if __name__ =='__main__':main()
은 물론 더 좋은 방법이 다음 전역 제거하고 함수 매개 변수로 교체하세요. 'useradd'와 같은 시스템 유틸리티를 호출하는 방법은'os.system'을 둘러 볼 방법이 없습니다. 또한,'generate()'의 try-except 논리는 공식적으로는 정확하지만, 완전히 비 관례 적입니다. 그리고 충분히 실패한 시도는 스택 오버 플로우를 유발할 것입니다. 'getpwnam'이 반환하는 값과 루프를 사용해보십시오. 벌어지는'except' 절은 많은 경우에 문제를 일으킬 수 있습니다. '^ C'을 누르면; 그것을 피하십시오. – 9000
@ rbart65 [명령] (https://docs.python.org/2/library/commands.html#commands.getstatusoutput)을 사용할 수도 있습니다. 제대로 작동해야한다고 생각합니다. –
@SidharthShah 파이썬 버전에 따라 모든 명령에 대해 하위 프로세스로 이동해야합니다. 명령은 2.6 이후로 더 이상 사용되지 않습니다. –