Я пытаюсь автоматизировать ssh-соединение. В этом сеансе я хочу отправить несколько команд для входа в другой подпроцесс.
import paramiko
import os
import time
ip = 'a'
port = 22
username = 'b'
password = 'c'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port,username,password)
channel = ssh.invoke_shell()
out = channel.recv(9999)
channel.send('net-client\n')
channel.send('connect\n')
channel.send('yes\n')
channel.send('password\n')
channel.send('help\n')
while not channel.recv_ready():
time.sleep(3)
out = channel.recv(9999)
print(out.decode("ascii"))
Ручная подготовка:
- $(приглашение от ssh-соединения)]
- $ net-client (когда я пишу эту команду, она открывает клиент, установленный на машине)
- & подключиться (у меня есть еще одна подсказка, потому что я нахожусь в подпроцессах, я пишу «подключиться»)
- Вы уверены, что хотите продолжить подключение (да/нет)? да (напишите «да») Интерактивная аутентификация SSH Введите пароль:
- Пароль: 'пароль' (я пишу пароль)
- & (теперь я подключен в подпроцессах)
Фактический результат: у меня есть правильный ответ после «net-client», но когда я пишу следующую команду (в данном случае «connect»), она будет записана в ssh-соединении, а не в подпроцессе...
Я хочу продолжить отправку команд в этом подпроцессе (поэтому введите команду, такую как подключение, пароль и т. Д.), Но мой скрипт не может справиться с этой операцией.
Это моя фактическая печать из скрипта:
$
net-client
"Correct answer to the command"
& connect
yes
password
help
invoke_shell
вместоexec_command
? - person Martin Prikryl   schedule 11.01.2019exec_command
откройте новый канал и выполните команду - person Rafał Szumski   schedule 11.01.2019exec_command
не открывает новый сеанс SSH. Он открывает (виртуальный) канал в существующем SSH-соединении. - person Martin Prikryl   schedule 13.01.2019