2017-02-10 15 views
0

Я пытаюсь подключить SSH через python. Я попытался удалить ошибки с помощью разных методов, все еще изо всех сил пытающихся избавиться от ошибок. Это мой код:Ошибка в коде python при использовании pxssh для SSH

1) import pxssh 
    import getpass 
    def get_ssh(): 
    s= pxssh.pxssh() 
    hostname = raw_input('IP: ') 
    username = raw_input('username: ') 
    password = getpass.getpass('password: ') 
    s.login (IP, username, password) 
    s.logout() 
    return True 

2) s= pxssh.pxssh(timeout='time_out', maxread=20000) 
    s.SSH_OPTS += " -o StrictHostKeyChecking=no" 
    s.SSH_OPTS += " -o UserKnownHostsFile=/dev/null" 
    s.login ('IP', 'username', 'password') 

В обоих случаях я получаю такие же ошибки. Также мне нужна информация о том, как передавать закрытый ключ и открытый ключ для аутентификации:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "mit_test.py", line 11, in get_ssh 
    s.login (hostname, username, password) 
    File "/usr/lib/python2.7/dist-packages/pxssh.py", line 196, in login 
    i = self.expect(["(?i)are you sure you want to continue connecting", original_prompt, 
    "(?i)(?:password)|(?:passphrase for key)", "(?i)permission denied", "(?i)terminal type", 
    TIMEOUT, "(?i)connection closed by remote host"], timeout=login_timeout) 
    File "/usr/lib/python2.7/dist-packages/pexpect.py", line 1316, in expect 
    return self.expect_list(compiled_pattern_list, timeout, searchwindowsize) 
    File "/usr/lib/python2.7/dist-packages/pexpect.py", line 1330, in expect_list 
    return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize) 
    File "/usr/lib/python2.7/dist-packages/pexpect.py", line 1401, in expect_loop 
    raise EOF (str(e) + '\n' + str(self)) 
pexpect.EOF: End Of File (EOF) in read_nonblocking(). Exception style platform. 
<pxssh.pxssh object at 0x2840ad0> 
version: 2.4 ($Revision: 516 $) 
command: /usr/bin/ssh 
searcher: searcher_re: 
    0: re.compile("(?i)are you sure you want to continue connecting") 
    1: re.compile("[#$]") 
    2: re.compile("(?i)(?:password)|(?:passphrase for key)") 
    3: re.compile("(?i)permission denied") 
    4: re.compile("(?i)terminal type") 
    5: TIMEOUT 
    6: re.compile("(?i)connection closed by remote host") 

Что именно мне нужно делать? Я искал некоторые другие комментарии, но не нашел никакого решения. Кроме того, как я могу установить путь для частного ключа в аргументе входа? Может кто-нибудь мне помочь? Я прошел через разные должности link [link] (EOF when using pexpect and pxssh), но не смог получить решение. Спасибо за ваше время.

+0

Вы пробовали ли соединение SSH с одного и того же хоста с тем же пользователем, что и ваша программа? – marekful

+0

Кроме того, похоже, что когда проверка ключа хоста обнаруживает новый хост, как кажется в этом случае, вы должны сначала набрать «да» на терминале, чтобы перейти к аутентификации. Вы можете отключить это с помощью [SSH options] (http://linuxcommand.org/man_pages/ssh1.html) ('-O') – marekful

+0

yes Я настроил базу данных с тем же именем и паролем хоста, и он работает. Теперь я хочу сделать SSH-туннель, используя python. –

ответ

0

Хост, с которым ваша программа пытается подключиться, - это новый хост, с которым он подключается. Сначала ключ хоста должен быть принят, прежде чем приступать к аутентификации. На терминале это требует ввода «да». Вы можете отключить проверку ключа хоста с помощью параметров SSH.

s = pxssh.pxssh(options={ 
    "StrictHostKeyChecking": "no"}) 
+0

Я попытался в обоих направлениях передать параметры 1) s = pxssh.pxssh (options = { «StrictHostKeyChecking»: «no»}) и 2) s = pxssh.pxssh (timeout = 'time_out', maxread = 2000000) s.SSH_OPTS + = "-o StrictHostKeyChecking = no" s.SSH_OPTS + = "-o UserKnownHostsFile =/dev/null "Но все же отображаются те же ошибки. Я не знаю, как передать открытый и закрытый ключ в регистрационную информацию. –

+0

я успешно сделал, используя paramiko: определение функции connect_ssh(): с = paramiko.SSHClient() c.set_missing_host_key_policy (paramiko.AutoAddPolicy()) c.connect ('151.252.41.105', порт = 22, имя пользователя = 'user', password = 'password', key_filename = '/home/ulw/.ssh/id_rsa') return c c = connect_ssh() stdin, stdout, stderr = c.exec_command ("ls -la") print stdout.readlines() '. –