2017-02-14 19 views
0
import paramiko 
import time 
import os 


ssh=paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect('server',port=22,username='user',password='pass123') 
print("connected to the linux machine from windows machine.") 

channel=ssh.invoke_shell() 

channel_data = str() 

while True: 
    if channel.recv_ready(): 
     channel_data += channel.recv(9999).decode(encoding='utf_8', errors='strict') 
     os.system('cls') 
     print("##### Device Output #####") 
     print("\n",channel_data) 
     print("\n #####################") 
    else: 
     continue 

    time.sleep(5) 

    if channel_data.endswith('[[email protected] ~]#'): 
     #if block statements are not executed why 
     print("Hi,why not executing this statement") 
     ssh.send('cd /\n') 
     #stdin,stdout,stderr=ssh.exec_command('pwd') 
     #output1=stdout.readlines() 
     print("My present working directory is") 
    elif channel_data.endswith('[[email protected] /]#'): 
     #Also elif block statements are not executed why 
     ssh.send('mkdir BB444') 
     #stdin,stdout,stderr=ssh.exec_command('mkdir /pn444') 
     #output1=stdout.readlines() 
     print("created pn444 directory") 

Я использую paramiko для подключения ssh. Я могу войти в Linux-машину. то я проверяю условие, то есть, если channel_data.endswith ('[root @ home ~] #'), тогда отправьте команду «cd /» else, если channel_data.endswith ('[root @ home /] #'), затем отправьте 'mkdir BB444 ', но этот скрипт не отправляет эти команды. после отладки я вижу, что эти команды отправки команд не выполняются. Пожалуйста, дайте мне знать, какую ошибку я делаю здесь.Python скрипт не отправляет команды linux. я использовал Paramiko для удаленного подключения SSH

Я использую Python 3.6, paramiko 2.1.1

+0

Обычно приглашение заканчивается в пространстве. Может быть, 'endswith ('[root @ home /] #')'? Или '' [root @ home ~] # ''. –

+0

Спасибо, Гириша. Ваше предложение решило проблему. –

+0

Привет, Гириша, я столкнулся с подобной проблемой в другом случае. Во время взаимодействия с командой, когда вывод идет со строкой «Хотите настроить сеть сейчас? (да/нет) [по умолчанию да] ', скрипту необходимо отправить команду «да». Ниже приведен код, написанный для этого. channel.send ('yes \ n') не выполняется. elif channel_data.endswith ('Вы хотите настроить Prime Network сейчас? (да/нет) [по умолчанию да]'): channel.send ('yes \ n') –

ответ

0

Проблема не может быть питон скрипт. Я столкнулся с подобными проблемами при отправке удаленных команд на соединение sshty ssh из сценария python. Если вы находитесь в корпоративной сети. некоторые администраторы отделяют команды от таких параметров, как -m, которые я использую для шпатлевки. поэтому вы можете войти в систему, но при попытке отправить удаленную команду. он не доходит до сервера. Проконсультируйтесь с вашим администратором, если вы находитесь в корпоративной сети о удаленных командах для соединений ssh.

+0

Спасибо Sivaprasath. На самом деле серверы Linux только в корпоративной сети. Я буду проверять с администратором ваше предложение, но в настоящее время я отправляю очень простые команды, такие как «cd /» или «pwd» или «mkdir pn444» –

+0

, вы отправляете удаленные команды, которые являются проблемой безопасности. Если никакие команды не пройдут. Еще одна вещь, если вы работаете с серверами CISCO или маршрутизаторами, - это встроенная система безопасности для удаления удаленных команд с команд ssh. –

+0

Я могу создать папку из сценария. это означает, что я могу успешно отправлять команды из сценария. Ниже приведен код. импорт paramiko SSH = paramiko.SSHClient() ssh.set_missing_host_key_policy (paramiko.AutoAddPolicy()) ssh.connect ('сервер', порт = 22, имя пользователя = 'пользователь', пароль = 'pass123') печать («подключен к машине linux из оконного компьютера. Okay basu») stdin, stdout, stderr = ssh.exec_command ('mkdir BB444') output1 = stdout.readlines() print ('создал новый каталог', output1) –