Как выполнять итеративные команды на сервере без входа на сервер с помощью Python - PullRequest
1 голос
/ 14 октября 2019

я использовал paramiko для добавления пользователя, но команда useradd работает и adduser нет никакого способа предоставить все детали, которые могут быть предоставлены, такие как пароль, имя, фамилияи т.д ...

#!/usr/bin/env python 
import paramiko
import subprocess
import os
import crypt
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('<hostname>', username='<username>', password='<password>', key_filename='<path/to/openssh-private-key-file>')
username = raw_input("enter the name : ")
a = stdin, stdout, stderr = ssh.exec_command( "useradd " + username  )
while line == stdout.readlines():
    print (line)
ssh.close()

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

sudo adduser $ username - это интерактивная команда, которую необходимо ввести для терминала. Вы можете использовать этот код:

Этот код будет взаимодействовать с терминалом целевого сервера в фоновом режиме и предоставит все необходимые входные данные, которые предоставляются пользователем для

username = input("enter the name : ")

. Он предоставляется в качестве входа длябыть добавленным в качестве пользователя

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
output = ssh.connect('<$server-ip>', port='<$port>', username='$username',
                     key_filename="key/file/path")
username = input("enter the name : ")
command = f"sudo adduser {username}"
channel = ssh.invoke_shell()
channel_data = str()
password = "$password_wants_to_assign"
complete = false
while True:
    if channel.recv_ready():
        channel_data = channel.recv(9999).decode("utf-8")
    else:
        continue

    if channel_data.endswith("hostname_of_targeted_server"):
        if not complete:
            channel.send(command)
            channel.send("\n")
            complete = True
        else:
            break
    elif channel_data.endswith("UNIX password: "):
        channel.send(password)
        channel.send('\n')
    elif channel_data.endswith("[]: "):
        channel.send('\n')
    elif channel_data.endswith("[Y/n] "):
        channel.send("Y\n")
ssh.close()`
0 голосов
/ 14 октября 2019

Вы уверены, что пользователь, которого вы использовали для входа на сервер, имеет разрешение на создание нового пользователя?
Вы можете попробовать использовать sudo в своих командах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...