Python3: заменить переменную в соединении paramiko - PullRequest
0 голосов
/ 01 мая 2018

Используя iter (), я получаю имя хоста из файла json. И я пытаюсь переслать имя хоста в paramiko connect, методы exec_command через вызов функции.

Но, подставляя имя хоста в качестве переменной, подключите метод, обрабатывая его как имя хоста вместо переменной.

Как заменить переменные в paramiko connect?

import paramiko,json
def exec_commands(host_data):
 host_data = host_data
 new_client=paramiko.SSHClient()
 new_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 new_client.connect(host_data,username='root',password='password',port=22,timeout=60)
 stdin, stdout, stderr = new_client.exec_command('uptime')
 for i in stdout:
    print(i)
 new_client.close()

with open('server_list.json','r') as f:
    server_list = json.load(f)


for item in server_list:
    print((item['mydev']))
    iterator_var = iter(item['mydev'])
    next(iterator_var)
    exec_commands(next(iterator_var))

И файл json имеет содержимое, как показано ниже

[
    {
        "mydev" : ["192.168.56.101","192.168.56.101","192.168.56.101"]
    }
]

Ошибка:

    Traceback (most recent call last):
  File "D:\Personal\Python_code\Logs_Finder\authentication.py", line 30, in <module>
    exec_commands(next(iterator_var))
  File "D:\Personal\Python_code\Logs_Finder\authentication.py", line 16, in exec_commands  new_client.connect(host_data,username='root',password='password',port=22,timeout=60)
  File "C:\Users\rgenupula\AppData\Local\Continuum\Miniconda3\lib\site-packages\paramiko\client.py", line 310, in connect
    retry_on_signal(lambda: sock.connect(addr))
  File "C:\Users\rgenupula\AppData\Local\Continuum\Miniconda3\lib\site-packages\paramiko\util.py", line 276, in retry_on_signal
    return function()
  File "C:\Users\rgenupula\AppData\Local\Continuum\Miniconda3\lib\site-packages\paramiko\client.py", line 310, in <lambda>
    retry_on_signal(lambda: sock.connect(addr))
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
[Finished in 26.4s]

Работает, если в качестве аргумента передан буквальный IP-адрес.

import paramiko,json

client=paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('192.168.56.102',port=22,username='root',password='password',timeout=60)
stdin, stdout, stderr = client.exec_command('uptime')
for i in stdout:
    print(i)
client.close()

1 Ответ

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

Когда я запускаю ваш код, он даже не достигает exec_commands. Твои next звонки имеют для меня небольшой смысл.

Это прекрасно работает:

for item in server_list:
    for item2 in item['mydev']:
        exec_commands(item2)
...