Цикл по ssh-соединениям и каталогам - PullRequest
0 голосов
/ 08 мая 2019

Я использую paramiko для удаленного доступа к различным хостам.Я могу запускать команды, аналогичные командам в оболочке Putty.

Я работаю над сценарием Python, который, я надеюсь, сделает это, но я борюсь с циклом for, равным

.пример моих каталогов

   host01
      directory1
          file1
          file2
          file3
      directory2
          file1
          file2
          file3
   host02
      directory1
          file1
          file2
          file3
      directory2
          file1
          file2
          file3

import paramiko
ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname='host01',username='loginid',password='password')

stdin,stdout,stderr=ssh_client.exec_command('''
    cd ..
    cd user/ze/log
    cd *05-07-2019*
    grep -c 1= file1 
    ''')
for line in stdout.readlines():
    print (line.strip())
for line in stderr.readlines():
    print (line.strip())

и т. д. *

В конечном итоге я хочу выполнить поиск каждого файла в каждом каталоге для определенного шаблона.

Я пытаюсьпонять, как я могу работать с переменными в выше.Любая помощь будет высоко ценится

1 Ответ

0 голосов
/ 08 мая 2019

Я предлагаю создать метод, в который вы можете легко передавать значения.Циклическая проверка будет зависеть от того, как вы храните сведения о соединении SSH, я бы посоветовал list из dict

команд, которые вы передаете в строки сеанса SSH, чтобы вы могли использовать string.format().Документы для python3 здесь

import paramiko


def ssh_grep(ssh_hostname, ssh_username, ssh_password, username, date, grep_filter)
    ssh_client=paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(hostname=ssh_hostname,
                       username=ssh_username,
                       password=ssh_password)

    stdin, stdout, stderr=ssh_client.exec_command('''
        cd ..
        cd user/{username}/log
        cd *{date}*
        grep -c 1= {grep_filter}
        '''.format(username=username,
                   date=date,
                   grep_filter=grep_filter))
    for line in stdout.readlines():
        print (line.strip())
    for line in stderr.readlines():
        print (line.strip())


for item in ssh_list:
    ssh_grep(item['ssh_hostname'],
             item['ssh_username'],
             item['ssh_password'],
             item['username'],
             item['date'],
             item['grep_filter'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...