Paramiko для подключения устройств, как вложенный способ - PullRequest
0 голосов
/ 08 октября 2018

Требование:

  1. Подключение к удаленному компьютеру и сценарию удаленного компьютера pull_details.py
  2. Выполнение сценария, находящегося на удаленном компьютере, который представляет собой pull_details.py
  3. Для запуска execute.py требуется несколько аргументов, таких как имя пользователя, пароль, имя хоста.pull_details снова подключается к другому устройству с помощью модуля paramiko с использованием протокола ssh

Для достижения вышеуказанного requiremet.Я использовал следующие вещи

  1. Настроил ssh без пароля соединение
  2. добавлено ниже строки в скрипте Python

    ['ssh', '-t', '1.1.1.1', 'python -u pull_details.py username password 10.10.10.10--get_name']
    

Это прекрасно работаетбез каких-либо проблем.

Проблема с этим подходом заключается в том, что пароль отображается при сбое сценария для somereasopn, как показано ниже:

File "/usr/lib64/python2.7/subprocess.py", line 575, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['ssh', '-t', '1.1.1.1', 'python -u pull_details testuser testpassword 10.10.10.10 --get_name']' returned non-zero exit status 1

Все, что мне требуется, это пароль не должен отображаться при прохождении aruments,

немногим членам предложено использовать paramiko, который решает вышеуказанную проблему.

Я попытался использовать скрипт ниже, чтобы реализовать то же самое в paramiko:

import os
import sys
import paramiko

class Connect_Remote:
    def connect(self, username, password, hostname):
        self.client=paramiko.SSHClient()
        self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.client.connect(hostname,username=username,password=password, look_for_keys=False, allow_agent=False)

    def send_cmd_output(self, cmd):
        stdin, stdout, stderr = self.client.exec_command(cmd)
        return stdout.read()

    def execute(self):
        #connect to remote machine 100.100.100.100
        self.connect("testuser", "testpassword", "1.1.1.1")
        print self.send_cmd_output("ls -l")
        print self.send_cmd_output("hostname")
        self.connect("testuser", "testpassword", "10.10.10.10")
        print self.send_cmd_output("sh interface brief")
remote_connect = Connect_Remote()
remote_connect.execute()

Когда я пытаюсь выполнить скриптЯ получаю ошибку ниже.

    Traceback (most recent call last):
    File "test2.py", line 23, in <module>
    remote_connect.execute()
    File "test2.py", line 20, in execute
    self.connect("testuser", "testpassword", "10.10.10.10")
    File "test2.py", line 9, in connect
    self.client.connect(hostname,username=username,password=password, look_for_keys=False, allow_agent=False)
    File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 338, in connect
    retry_on_signal(lambda: sock.connect(addr))
    File "/usr/lib/python2.7/site-packages/paramiko/util.py", line 279, in retry_on_signal
    return function()
    File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 338, in <lambda>
    retry_on_signal(lambda: sock.connect(addr))
    File "/usr/lib64/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
    socket.error: [Errno 110] Connection timed out

Может ли кто-нибудь предложить правильный метод или как исправить вышеуказанную проблему

...