SSHing из скрипта Python и запустите команду sudo, чтобы дать пароль sudo - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь подключиться по SSH к другому хосту из скрипта Python и запустить команду, которая требует sudo.

Я могу использовать SSH из скрипта Python следующим образом:

import subprocess
import sys
import json

HOST="hostname"
# Ports are handled in ~/.ssh/config since we use OpenSSH
COMMAND="sudo command"

ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
                       shell=False,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if result == []:
    error = ssh.stderr.readlines()
    print(error)
else:
    print(result)

Но я хочу запустить такую ​​команду после sshing:

extract_response = subprocess.check_output(['sudo -u username internal_cmd',
                                          '-m', 'POST',
                                          '-u', 'jobRun/-/%s/%s' % (job_id, dataset_date)])

        return json.loads(extract_response.decode('utf-8'))[0]['id']

Как мне это сделать?

Кроме того, я не хочу предоставлять пароль sudo каждый раз, когда я запускаю эту команду sudo, для этого я добавил эту команду (т. Е. Internal_cmd сверху) в конце visudo на новом хосте, которым я являюсь. пытаясь ssh в. Но все же, когда просто набираешь эту команду прямо в терминале, вот так:

ssh -t hostname sudo -u username internal_cmd -m POST -u/-/1234/2019-01-03

Мне предлагается ввести пароль. Почему это происходит?

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Если вы не хотите беспокоиться о том, где хранить пароль sudo, вы можете подумать о добавлении пользователя сценария в список sudoers с доступом sudo только к той команде, которую вы хотите запустить, вместе с опцией «пароль не требуется». Смотрите страницу руководства sudoers (5).

Вы можете дополнительно ограничить доступ к командам, добавив опцию «command» к началу вашей записи author_keys. См. Справочную страницу sshd (8).

Если вы можете, отключите аутентификацию по паролю SSH, чтобы требовать только аутентификацию по SSH ключу. См. Справочную страницу sshd_config (5).

0 голосов
/ 05 января 2019

Вы можете передать пароль, используя флаг -S, который сообщает sudo, чтобы прочитать пароль со стандартного ввода.

echo 'password' | sudo -S [command]

Возможно, вам придется поэкспериментировать с тем, как вы вводите команду ssh, но это должно делать то, что вам нужно.

Предупреждение: вы, возможно, уже знаете это ... но никогда не сохраняйте свой пароль непосредственно в своем коде, особенно если вы планируете отправить код на что-то вроде Github. Если вы не знаете об этом, изучите возможность использования переменных среды или сохранения пароля в отдельном файле.

...