valloru
Фев. 26, 2018 13:39:16
Есть довольно важная задача - подключение к оборудованию cisco во время выполнения программы python. Все в принципе проходит нормально, но беда в том что в самом скрипте приходится в явном виде указывать логин/пароль, например:
f=open(“File.txt”)
lines=list(f)
for l in lines:
acc = Account('login', ‘password’)
con = SSH2()
print(l.strip())
con.connect(l.strip())
con.login(acc)
con.execute('terminal length 0')
con.execute('sh run')
con.send('exit')
Суть скрипта в том что мы коннектимся к оборудованию из списка File.txt и выводм sh run. Можно каким-либо образом скрыть login/password?
read_login() идея отличная, но во время выполнения просто все зависает
getpass та же проблема
get_accounts_from_file не очень понятно как его применять.
Может кто что подсказать?
JOHN_16
Фев. 26, 2018 13:52:00
valloru
read_login() идея отличная, но во время выполнения просто все зависает
потому что это и подобное ожидают ввода пароля от пользователя. Это не ваш случай.
Если можете правами доступа к файлу ограничить доступ для посторонних лиц, то как вариант делайте так. Пароль всегда будет в каком либо виде доступен, ведь его надо прочитать и явно передать.
valloru
Фев. 26, 2018 13:58:19
JOHN_16, я понимаю что read_login() по идее должен предлагать мне ввести логин пароль, но этого пчему-то не происходит, точнее логин ввести могу, дальше программа ничего не предлагает, ну и бог с ним. В принципе get_accounts_from_file была бы прекрасным вариантом. Но видимо моих знаний и понимания документации не достаточно что бы корректно этим вариантом воспользоваться. Если делаю
acc = get_accounts_from_file(“accounts.cfg”), получаю ошибку:
line 17, in <module>
con.login(acc)
Можте подсказать в чем проблема?
papuas
Фев. 26, 2018 14:44:38
from os import getlogin
import sys
import keyring
import getpass
my_server = '192.168.0.1'
def windows_credential():
# look there: cmd -> control userpasswords2 -> Advanced -> Manage passwd -> Windows Credential
passwd = getpass.getpass(prompt='Please input password for account: ')
keyring.set_password(my_server, getlogin(), passwd)
print('The Windows credential was sucessfully created for host: {} and user: {}'.format(my_server, getlogin()))
def get_passwd():
passwd = keyring.get_password(my_server, getlogin())
if passwd is None:
print('Please create windows credential for host')
sys.exit(1)
return passwd
windows_credential()
print(get_passwd())
как вариант ? для передачи используйте ssh_v2 транспорт шифруется.
papuas
Фев. 26, 2018 14:59:28

картинка из гугла просто для примера
keyring также работает с linux credentials
скрипты это конечно хорошо, но мне кажется вам скорее всего нужно
это