Требование:
- Подключение к удаленному компьютеру и сценарию удаленного компьютера pull_details.py
- Выполнение сценария, находящегося на удаленном компьютере, который представляет собой pull_details.py
- Для запуска execute.py требуется несколько аргументов, таких как имя пользователя, пароль, имя хоста.pull_details снова подключается к другому устройству с помощью модуля paramiko с использованием протокола ssh
Для достижения вышеуказанного requiremet.Я использовал следующие вещи
- Настроил ssh без пароля соединение
добавлено ниже строки в скрипте 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
Может ли кто-нибудь предложить правильный метод или как исправить вышеуказанную проблему