Fabric не видит приглашение Password: для удаленного устройства (Aruba Mobility Master) по SSH.
Сценарий, который я написал, использует fabric2 и Python3 для входа на удаленное сетевое устройство и запускает команду для SCPфайл с этого устройства на другое устройство.После выполнения команды SCP устройство запрашивает пароль.Это приглашение отображается при работе с обычным клиентом SSH, но не отображается при работе с фабрикой.
Я протестировал с pty = False и pty = True
Скрипт не зависает какего ожидание ввода либо.Он просто продолжается, и SCP не работает с неверным паролем.
Запрос на ввод пароля является немного особенным в том смысле, что он будет отображать символы со звездочками (*) вместо того, чтобы вообще ничего не отображать.
Сетевое устройство не обеспечивает нормальную оболочку bash.Вместо этого это специфическая для поставщика оболочка (Aruba / HPE).Устройство "Aruba Mobility Master"
from invoke import Responder
scppass = Responder(
pattern=r'Password:',
response='MyPassword\n',
)
connect_kwargs = {"password": "LoginPassword"}
c = Connection(host="1.2.3.4", user="username", connect_kwargs=connect_kwargs)
# Have tried with pty=False and pty=True
c.run("copy flash: configbackup.tar.gz scp: 2.3.4.5 username /PATH/configbackup.tar.gz", pty=True, watchers=[scppass])
Так выглядит при запуске из интерактивного сеанса SSH
Password:*********************
Secure file copy:
Press 'q' to abort.
....
File uploaded successfully
Это вывод из фабрики
Secure file copy:
Press 'q' to abort.
............
Error copying file:
Permission denied: wrong username or password
Также пробовал с
ssh username@1.2.3.4 "copy flash: nothng scp: 2.3.4.5 user /something/asd" >out 2>err
ssh -t username@1.2.3.4 "copy flash: nothng scp: 2.3.4.5 user /something/asd" >out 2>err
Ни один из них не захватывает "Пароль:" ни в файле stdout, ни в stderr.