Wie führe ich einen Befehl über einen SSH -Tunnel aus?Python

Python-Programme
Anonymous
 Wie führe ich einen Befehl über einen SSH -Tunnel aus?

Post by Anonymous »

Ich versuche, den Start von VNC-Clients für mehrere Remote-Systeme zu automatisieren. Derzeit erreiche ich das mit einem lokalen Forward 15900 127.0.0.1:5900 . VNC verwendet standardmäßig Port 5900, was in Ordnung ist-es sollte jeweils nur ein VNC-Server auf jeder Maschine vorhanden sein. Aber ich mag einige Male mehrere VNC-Viewern ausgeführt haben, sodass der lokale Port dynamisch sein muss-und kann nicht hartcodiert werden (wie bis 15900).

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?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post