Найти - Пользователи
Полная версия: Скрипт, создающий коннекты по ssh
Начало » Python для новичков » Скрипт, создающий коннекты по ssh
1
lomach
Суть проблемы: нужен скрипт на python, который бы заходил на множество серверов и выполнял некие команды. При этом список серверов должен хранится в некоем файле рядом.
Написал примерно следующее:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
import paramiko
import os
hosts = open("hosts.txt","r").readlines()
def my_connection(line):
    try:
        ssh = paramiko.SSHClient()
        ssh.connect(line, username='my_login', key_filename="/home/my_homedir/.ssh/id_rsa")
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        stdin, stdout, stderr = ssh.exec_command('uptime')
        output = stdout.readlines()
        print output
    except paramiko.AuthenticationException, e:
        print(e)
        sys.exit(0)
    except paramiko.BadHostKeyException, e:
        print(e)
        sys.exit(0)
    except Exception, e:
        print(e)
        sys.exit(0)
hosts = open("hosts.txt","r").readlines()
for line in hosts:
    line.strip()
    line = str(line)
    print line
    my_connection(line)

Есть коннект к серверу, если задать отдельно переменную line.
Файл парсится и выводится его содержимое.
Все вместе не работает. Выдает ошибку:
(-2, 'Name or service not known')
ОС RHEL 5.5
python 2.4
lomach
Убрали try и except.

Сейчас ошибка:
Traceback (most recent call last):
  File "./file_parser.py", line 38, in ?
    my_connection(line)
  File "./file_parser.py", line 16, in my_connection
    ssh.connect(line, username='my_username', key_filename="/home/my_homedir/.ssh/id_rsa")
  File "/usr/lib/python2.4/site-packages/paramiko/client.py", line 278, in connect
    for (family, socktype, proto, canonname, sockaddr) in socket.getaddrinfo(hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
socket.gaierror: (-2, 'Name or service not known')
bw
Всё таки было бы не безполезно взглянуть на вывод, а то так мы оказываемся в менее выгодном положении чем вы, что бы разгадать эту тайну вселенной. Не спортивное поведение, уважаемый :-). И как там “отдельная переменная” выглядит, которая в коде работает, а в “hosts.txt” нет?

..bw
lomach
line = ‘test.mydomain.ru’
myarik
Посмотрите в сторону fabric, намного лучше подходит для таких задач.
lomach
Сдался и сделал на bash.
myarik
Написал скрипт для выполнения Вашей задачи, http://up24x7.com.ua/archives/290 – по ссылке Вы можете найти листинг программы и как его использовать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB