Как смоделировать наш собственный бинарный файл ssh в Paramiko?

1

У меня есть команда, такая как

ssh -S myAuthServer hostname

Я пытался создать фрагмент кода, и я не уверен, как реализовать часть -S. Код, который у меня есть на данный момент:

#!/usr/bin/python

import paramiko
from paramiko import SSHClient, SSHConfig, SSHException

paramiko.util.log_to_file("/tmp/script.log")

def getSSHConnection():
    config = SSHConfig()


    host='server1'        

    # setup SSH client
    client = SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    #Check for proxy settings
    proxy = paramiko.ProxyCommand('ssh -S myAuthServer root@%s' % host)
    print "proxy:", proxy

    #Setup the SSH connection
    try:
        if (proxy is None):
            client.connect(host, port=22, username='root')
        else:
            print "-> Using paramiko with proxy"
            client.connect(host, port=22, username='root', sock=proxy)

    except SSHException, ex:
        print ex

    if client:
        stdin, stdout, stderr = client.exec_command('hostname')
        tables=stdout.readlines()

        print "stdin:", stdin
        print "stdout:", stdout
        print "stderr:", stderr
        print "tables:", tables    

    return client

getSSHConnection()

Ошибка, которую я получаю

INF [20181011-11:14:55.131] thr=1   paramiko.hostkeys: Unable to handle key of type 1024
DEB [20181011-11:14:55.161] thr=2   paramiko.transport: starting thread (client mode): 0x4f35fd0L
DEB [20181011-11:14:55.161] thr=2   paramiko.transport: Local version/idstring: SSH-2.0-paramiko_2.2.1
ERR [20181011-11:15:10.242] thr=2   paramiko.transport: Exception: Error reading SSH protocol banner
ERR [20181011-11:15:10.245] thr=2   paramiko.transport: Traceback (most recent call last):
ERR [20181011-11:15:10.246] thr=2   paramiko.transport:   File "/Users/root/Library/Python/2.7/lib/python/site-packages/paramiko/transport.py", line 1805, in run
ERR [20181011-11:15:10.246] thr=2   paramiko.transport:     self._check_banner()
ERR [20181011-11:15:10.246] thr=2   paramiko.transport:   File "/Users/root/Library/Python/2.7/lib/python/site-packages/paramiko/transport.py", line 1957, in _check_banner
ERR [20181011-11:15:10.246] thr=2   paramiko.transport:     'Error reading SSH protocol banner' + str(e)
ERR [20181011-11:15:10.246] thr=2   paramiko.transport: SSHException: Error reading SSH protocol banner
ERR [20181011-11:15:10.246] thr=2   paramiko.transport:
  • 0
    Я чувствую проблему XY здесь - рассмотрите возможность объяснить нам, что вы пытаетесь реализовать функционально.
  • 0
    Мне нужно аутентифицировать свое соединение на каком-либо прокси как другой уровень безопасности, в противном случае, независимо от того, насколько совпадают мои личные ключи - я не смогу соединиться из-за посредника. из ответа @martins' - я понял, что мой подход к решению этого все неправильно ...
Показать ещё 6 комментариев
Теги:
ssh
paramiko

1 ответ

1
Лучший ответ

Вы не можете заставить Paramiko использовать oursshbinary как реализацию SSH. Вы даже не можете использовать ssh.

Парамико - это сам ssh.

Это же (как вы знаете сейчас), как будто вы хотели использовать ssh oursshbinary (это не имеет смысла). Вы должны заставить Paramiko сделать то, что делает oursshbinary. Но мы не знаем, что делает oursshbinary, по сравнению с ssh.


Ответ на предыдущую версию вашего вопроса:

-S клиента OpenSSH ssh создает совместное использование соединений, которое может быть повторно использовано другими экземплярами ssh или других инструментов OpenSSH (например, sftp).

Парамико не поддерживает соединение. Для этого нет смысла делать это.

Совместное использование имеет смысл для инструментов/приложений. Один экземпляр инструмента создает соединение, а другие экземпляры одного и того же или другого инструмента могут повторно использовать соединение.

Но вам это не нужно в скрипте/при программировании. У вас есть экземпляр сеанса SSH. Вы можете использовать его для нескольких целей на протяжении всего скрипта/программы. Другими словами, вы можете поделиться своим экземпляром.

В частности, с SSH, совместное использование OpenSSH открывает отдельный SSH-канал для клиента совместного доступа. С помощью Paramiko вы можете открывать несколько разделенных каналов по одному и тому же соединению SSH. Вот как это делают методы Transport.open_sftp_client (или SSHClient.open_sftp), Transport.open_session (SSHClient.invoke_shell, SSHClient.exec_command). Все они внутренне называют Transport.open_channel. Вы можете вызывать все это столько раз, сколько вам нужно, для одного сеанса SSH.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню