Code: Select all
freePort
SSH in den angegebenen Remote -Computer (als angegebener Benutzer). /> Rufen Sie den vncViewer localhost: freeport < /code> lokal auf. Ich benutze dann sshtunnelarderer: < /p>
import os
import paramiko
import socket
import sys
import sshtunnel
import logging
from paramiko import SSHClient
def freePort():
s = socket.socket()
s.bind(('localhost', 0))
port = s.getsockname()[1]
s.close()
return port
logging.basicConfig(level = logging.DEBUG,
format='%(asctime)s %(message)s')
try:
user, host = sys.argv[1].split('@')
except ValueError:
host = sys.argv[1]
user = os.getlogin()
tunnel = sshtunnel.SSHTunnelForwarder(host, ssh_username = user,
local_bind_address = ('127.0.0.1', freePort()),
remote_bind_address = ('127.0.0.1', 5900))
print(tunnel)
< /code>
Das obige funktioniert gut und druckt am Ende Folgendes aus: < /p>
object
ssh gateway: foo.example.com:23
proxy: no
username: meow
authentication: {'pkeys': [('ssh-rsa', b'081c323ca3b5bb6f157f91984b2cb7b2')]}
hostkey: not checked
status: not started
keepalive messages: disabled
tunnel connection check: disabled
concurrent connections: allowed
compression: not requested
logging level: ERROR
local binds: [('127.0.0.1', 21242)]
remote binds: [('127.0.0.1', 5900)]
< /code>
Aber jetzt muss ich den Remote-Befehl (Schritt 4.) Starten ... vermutlich muss ich dafür Paramikos sshclient () verwenden, aber ich sehe nicht, wie man das mache, ohne eine neue SSH-Verbindung zu starten. Es muss eine Möglichkeit geben, einen Befehl über den bereits geschaffenen Tunnel auszugeben. Wie würde ich das machen?>