Μετάβαση ενός εδραιωμένου τούνελ HTTP CONNECT στο Paramiko
Συνδέστε το Paramiko μέσω εξουσιοδοτημένης διαδρομής HTTP CONNECT διατηρώντας την επαλήθευση κλειδιού κεντρικού υπολογιστή SSH.
Αφού ένα βοηθητικό πρόγραμμα HTTP CONNECT επιστρέψει ένα τούνελ στον προοριζόμενο διακομιστή SSH, δώστε αυτή τη ροή στο Paramiko:
with paramiko.SSHClient() as client:
client.load_system_host_keys()
client.connect('ssh.example.com',
username='operator',
sock=tunnel,
banner_timeout=10,
auth_timeout=10)
# Use the verified SSH connection.Αντικαταστήστε τον παράδειγμα κεντρικού υπολογιστή και φορτώστε τα σωστά δεδομένα known-hosts της ανάπτυξης. Το tunnel πρέπει ήδη να οδηγεί στον ίδιο διακομιστή. Το όνομα κεντρικού υπολογιστή που περνά στο connect προσδιορίζει το κλειδί κεντρικού υπολογιστή SSH, όχι το proxy.
Η διεπαφή sock δέχεται ένα ανοιχτό socket ή αντικείμενο που μοιάζει με socket. Δεν διαπραγματεύεται HTTP για εσάς. Πριν την επιστρέψει, ο συνδετήρας πρέπει:
- Να συνδεθεί στο proxy και να στείλει ένα έγκυρο αίτημα CONNECT για τον προορισμό.
- Να ολοκληρώσει κάθε υποστηριζόμενη πιστοποίηση proxy και να επικυρώσει επιτυχή κατάσταση τούνελ.
- Να διαβάσει ολόκληρο το τμήμα κεφαλίδων του proxy, χειριζόμενος μερικές αναγνώσεις και διατηρώντας bytes πέρα από το όριο.
- Να περιορίσει τη ρύθμιση και να κλείσει τα απορριφθέντα/εσφαλμένα sockets μέσω της διαδρομής καθαρισμού του.
Χρησιμοποιήστε έναν συντηρούμενο συνδετήρα για αυτή την εργασία. Η αναζήτηση μιας αγγλικής φράσης επιτυχίας σε έναν buffer λήψης χάνει διαχωρισμένες γραμμές κατάστασης, μεταβλητό κείμενο αιτίας και ελλιπείς κεφαλίδες. Μια επιτυχημένη σύνδεση TCP μέσω proxy δεν είναι το αποδεκτό τούνελ SSH.
Το proxy πρέπει να επιτρέπει τη ζητούμενη θύρα SSH· η άδεια περιήγησης ιστού δεν εγκαθιστά πρόσβαση CONNECT στη θύρα 22. Ένα 407 συμβαίνει πριν τη σύνδεση SSH, ενώ μια αποτυχία λογαριασμού SSH συμβαίνει μετά το τούνελ. Κρατήστε αυτούς τους λογαριασμούς ξεχωριστούς.
Κλείστε τον πελάτη SSH και τους πόρους που κατέχει ο συνδετήρας όταν τελειώσετε. Η διακοπή των αναγνώσεων μιας εργασίας δεν κλείνει από μόνη της μια ενεργή σύνδεση.