Как смоделировать наш собственный бинарный файл ssh в Paramiko? - PullRequest
0 голосов
/ 11 октября 2018

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

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:

1 Ответ

0 голосов
/ 11 октября 2018

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

Paramiko сам по себе ssh.

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


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

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

Paramiko не поддерживает совместное использование соединений.На самом деле это не имеет смысла.

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

Но вам это не нужно в скрипте / при программировании.У вас есть экземпляр сеанса 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...