é necessário pôr um servidor de sftp em execução em python

eu vi este post no StackOverflow SFTP server implementaion com Python

eu tentei montar https://pypi.python.org/pypi/sftpserver mas não consigo pô-lo a funcionar correctamente.

Tal como o post stackoverflow acima, estou a tentar desenvolver um método para ligar o ssh aos switches que sou capaz de fazer usando o paramiko, mas depois preciso de ser capaz de copiar os ficheiros / configures dos switches de volta para a máquina do windows onde estou a correr o meu python roteiro. preciso de ter um servidor sftp operacional baseado em python a funcionar na minha máquina do windows que aceite ligações de qualquer cliente sftp como os switches. então eu atualmente usei o seguinte código abaixo para executar o servidor sftp em python na minha máquina do windows. eu testei a conexão de outro host do windows, eu sou capaz de telnet para a porta 22, bem, então eu sei o servidor sftp para python está em execução, quando eu executar o winscp da outra janela host, ele faz uma conexão, mas, em seguida, expirar. posso configurar um ftp servidor python e conectar usando ftp cliente fine para que eu sei que Não tenho nenhum tipo de problema de rede.

não tens a certeza do que estou a fazer de errado quando estou a correr o servidor sftp abaixo em python? eu não sei se minha chave está errada , eu segui os passos do link sftpserver acima e ran " openssl req-out CSR.csr-new-newkey rsa: 2048-nodos-keyout /tmp/test_ RSA.chave " para criar uma chave de um hospedeiro ubuntu que eu tinha. eu não vejo que qualquer nome de usuário ou senha é necessária do lado do cliente quando eu uso winscp para ligar.. aqui está a saída netstat-aon do windows para que ele esteja ouvindo no 22 e telnet para ele funciona a partir de outro host.

Ligações Activas

endereço local Proto endereço estrangeiro Estado PID TCP 0.0.0.0:22 0.0.0.0:0 ESCUTA 7012

o código que estou a usar é o seguinte:: https://gist.github.com/Girgitt/2df036f9e26dba1baaddf4c5845a20a2 por isso, em suma, preciso de um funcionamento servidor sftp em execução em Windows em python script, em seguida, usar qualquer componente não-python como winscp ou um switch para se conectar ao servidor sftp em execução em windows em python script?

import time
import socket
import optparse
import sys
import textwrap
import os
import paramiko

from sftpserver.stub_sftp import StubServer, StubSFTPServer

import threading

HOST, PORT = 'localhost', 22
BACKLOG = 10

class ConnHandlerThd(threading.Thread):
    def __init__(self, conn, keyfile):
        threading.Thread.__init__(self)
        self._conn = conn
        self._keyfile = keyfile

    def run(self):
        host_key = paramiko.RSAKey.from_private_key_file(self._keyfile)
        transport = paramiko.Transport(self._conn)
        transport.add_server_key(host_key)
        transport.set_subsystem_handler(
            'sftp', paramiko.SFTPServer, StubSFTPServer)

        server = StubServer()
        transport.start_server(server=server)

        channel = transport.accept()
        while transport.is_active():
            time.sleep(1)


def start_server(host, port, keyfile, level):
    paramiko_level = getattr(paramiko.common, level)
    paramiko.common.logging.basicConfig(level=paramiko_level)

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    server_socket.bind((host, port))
    server_socket.listen(BACKLOG)

    while True:
        conn, addr = server_socket.accept()

        srv_thd = ConnHandlerThd(conn, keyfile)
        srv_thd.setDaemon(True)
        srv_thd.start()


def main():
    usage = """\
    usage: sftpserver [options]
    -k/--keyfile should be specified
    """
    parser = optparse.OptionParser(usage=textwrap.dedent(usage))
    parser.add_option(
        '--host', dest='host', default=HOST,
        help='listen on HOST [default: %default]')
    parser.add_option(
        '-p', '--port', dest='port', type='int', default=PORT,
        help='listen on PORT [default: %default]'
        )
    parser.add_option(
        '-l', '--level', dest='level', default='INFO',
        help='Debug level: WARNING, INFO, DEBUG [default: %default]'
        )
    parser.add_option(
        '-k', '--keyfile', dest='keyfile', metavar='FILE',
        help='Path to private key, for example /tmp/test_rsa.key'
        )

    options, args = parser.parse_args()
    options.keyfile = "C:\\test_rsa.key"

    if options.keyfile is None:
        parser.print_help()
        sys.exit(-1)

    start_server(options.host, options.port, options.keyfile, options.level)

if __name__ == '__main__':
    main()
Author: Community, 2017-04-20

1 answers

Eu descobri. o meu ficheiro de chaves

Tinha

-----INICIAR A CHAVE PRIVADA----- MIEdksjdlfaj;slkdfj......... ..... ----- TERMINAR A CHAVE PRIVADA----- nele.

Tive de mudar para

-----INICIAR A CHAVE PRIVADA RSA----- MIEdksjdlfaj;slkdfj......... ..... ----- TERMINAR A CHAVE PRIVADA RSA-----

Depois o winscp pediu-lhe que o fizesse bem

 0
Author: john johnson, 2017-04-20 02:21:50