Какой минимальный объем информации необходим для доступа к SSH-серверу с использованием twisted.conch? - PullRequest
0 голосов
/ 17 июня 2019

Я немного над головой, когда дело доходит до этого SSH. В основном я пытаюсь получить доступ к серверу друзей через SSH туннель, используя витую раковину. Он дал мне следующую информацию:

MONGO_HOST = "ip address"
MONGO_DB = "server name"
MONGO_USER = "user name"
MONGO_PASS = "server password"

Мне удалось заставить эту информацию работать, используя библиотеку python motor.motor_asyncio (мне нужно, чтобы она была совместима с асинхронностью для использования с другими библиотеками), но по причинам, в которые я могу войти при необходимости, не будет работать на Raspberry Pi, на котором я планирую запустить эту программу.

Короче говоря, мне было интересно, может ли кто-нибудь помочь мне с некоторым примером кода для доступа к серверу моих друзей, используя информацию, приведенную выше с twisted.conch.

Я посмотрел на readthedocs в twisted.conch, но для примера требуется больше информации, чем я могу предоставить (я думаю), и это ПУТЬ над моей головой с точки зрения сетевого взаимодействия / SSH / и т. Д.

Спасибо заранее. Я готов поставить на работу, но мне нужно знать, где искать.

Вот мой соответствующий бит кода:

from motor.motor_asyncio import AsyncIOMotorClient
from sshtunnel import SSHTunnelForwarder

MONGO_HOST = "host address"
MONGO_DB = "server name"
MONGO_USER = "username"
MONGO_PASS = "password"

server = SSHTunnelForwarder(
    MONGO_HOST,
    ssh_username=MONGO_USER,
    ssh_password=MONGO_PASS,
    remote_bind_address=('address', gate),
    local_bind_address=('address', gate)
)
server.start()

client = AsyncIOMotorClient('address', gate)
db = client.server_name

1 Ответ

0 голосов
/ 21 июня 2019

Вы можете переадресовывать порты с помощью Conch следующим образом:

rom twisted.internet.defer import Deferred
from twisted.conch.scripts import conch
from twisted.conch.scripts.conch import ClientOptions, SSHConnection
from twisted.conch.client.direct import connect
from twisted.conch.client.default import SSHUserAuthClient, verifyHostKey
from twisted.internet.task import react

def main(reactor):
    # authenticate as this user to SSH                                                                                                                                                                                                                                         
    user = "sshusername"
    # the SSH server address                                                                                                                                                                                                                                                   
    host = "127.0.0.1"
    # the SSH server port number                                                                                                                                                                                                                                               
    port = 22

    # a local port number to listen on and forward                                                                                                                                                                                                                             
    localListenPort = 12345
    # an address to forward to from the remote system                                                                                                                                                                                                                          
    remoteForwardHost = "127.0.0.1"
    # and the port number to forward to                                                                                                                                                                                                                                        
    remoteForwardPort = 22

    conch.options = ClientOptions()
    conch.options.parseOptions([
        # don't ask the server for a shell                                                                                                                                                                                                                                     
        "--noshell",
        # set up the local port forward                                                                                                                                                                                                                                        
        "--localforward={}:{}:{}".format(
            localListenPort,
            remoteForwardHost,
            remoteForwardPort,
        ),
        # specify the hostname for host key checking                                                                                                                                                                                                                           
        host,
    ])
    # don't stop when the last forwarded connection stops                                                                                                                                                                                                                      
    conch.stopConnection = lambda: None

    # do normal-ish authentication - agent, keys, passwords                                                                                                                                                                                                                    
    userAuthObj = SSHUserAuthClient(user, conch.options, SSHConnection())

    # create a Deferred that will tell `react` when to stop the reactor                                                                                                                                                                                                        
    runningIndefinitely = Deferred()

    # establish the connection                                                                                                                                                                                                                                                 
    connecting = connect(
        host,
        port,
        conch.options,
        verifyHostKey,
        userAuthObj,
    )

    # only forward errors so the reactor will run forever unless the                                                                                                                                                                                                           
    # connection attempt fails.  note this does not set up reconnection for a                                                                                                                                                                                                  
    # connection that succeeds and then fails later.                                                                                                                                                                                                                           
    connecting.addErrback(runningIndefinitely.errback)

    return runningIndefinitely

# run the reactor, call the main function with it, passing no other args                                                                                                                                                                                                       
react(main, [])

Некоторые API странные, потому что они ориентированы на CLI.Вам не нужно делать это таким образом, но переадресацию портов легче всего получить с помощью этих API, а не API, которые в большей степени ориентированы на программирование.

...