Как выполнить команду 'su' с помощью parallel-ssh - PullRequest
0 голосов
/ 29 мая 2018

Я хочу войти на два хоста, используя parallel-ssh и выполнить команду su.Затем я хочу подтвердить, что являюсь пользователем root, распечатав whoami

Код:

hosts = ['myHost1', 'myHost2']
client = ParallelSSHClient(hosts, user='myUser', password='myPassword')

output = client.run_command('su')

for host in output:
    stdin = output[host].stdin
    stdin.write('rootPassword\n')
    stdin.flush()

client.join(output)

output = client.run_command('whoami')

for host, host_output in output.items():
    for line in host_output.stdout:
        print("Host [%s] - %s" % (host, line))

Результат:

Host [myHost1] - myUser
Host [myHost2] - myUser

Очевидно, я ожидаю rootна выходе. Я слежу за документацией.

Я пробовал использовать все различные окончания строк вместо \n, и ничего не изменилось.Как выполнить команду su, используя parallel-ssh?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Оказывается, то, что я пытаюсь сделать, недостижимо.

Первая проблема

Я обнаружил в этом посте , что все команды находятся в своем собственном канале.Это означает, что даже если su будет успешным, это не повлияет на вторую команду.Автор поста рекомендует запустить

su -c whoami - root

Вторая проблема

Мне удалось еще больше отладить проблему, изменив host_output.stdout на host_output.stderr Оказалосьиз-за того, что я получаю ошибку, которая ранее не отображалась на терминале:

standard in must be a tty

Возможные решения этой проблемы: здесь .Они не работают для меня, но могут работать для вас.

Для меня обходным путем было разрешить на всех моих хостах вход в систему root.И тогда в параллель-ssh я захожу как рут уже со всеми правами на месте.

0 голосов
/ 29 мая 2018

попробуйте поставить sudo=True в конце run_command

output = client.run_command(<..>, sudo=True)

как в документах

...