Το AsyncSSH παρέχει δυναμική προώθηση TCP μέσω του forward_socks(). Μια εφαρμογή που διαθέτει ήδη το AsyncSSH μπορεί να δημιουργήσει τοπικό ακροατή SOCKS πάνω από σύνδεση SSH:

import asyncio
import asyncssh

async def main():
    async with asyncssh.connect(
        'jump.example.net', username='operator'
    ) as connection:
        listener = await connection.forward_socks('127.0.0.1', 1080)
        await listener.wait_closed()

asyncio.run(main())

Ο διακομιστής SSH και ο λογαριασμός είναι παραδείγματα. Ισχύει ο συνήθης έλεγχος κλειδιών κεντρικού υπολογιστή του AsyncSSH. Ο διακομιστής πρέπει να επιτρέπει την αιτούμενη προώθηση TCP. Για το ισοδύναμο στη γραμμή εντολών, η τοπική δυναμική προώθηση του OpenSSH χρησιμοποιεί την ίδια κατεύθυνση από το SSH προς τον προορισμό.

Οι τοπικοί πελάτες μπορούν πλέον να χρησιμοποιούν το 127.0.0.1:1080 ως τελικό σημείο SOCKS. Κάθε αίτημα SOCKS δηλώνει τον προορισμό του· ο διακομιστής SSH ανοίγει την αντίστοιχη εξερχόμενη σύνδεση TCP. Η εφαρμογή δεν χρειάζεται να εκτελεί απομακρυσμένο πρόγραμμα λήψης για κάθε URL.

Η αναμονή κρατά την ασύγχρονη συνάρτηση μέσα στο πεδίο της σύνδεσης. Η άμεση επιστροφή μετά τη δημιουργία του ακροατή θα έβγαινε από αυτό το πεδίο και θα έκλεινε τη σύνδεση που τον στηρίζει. Μια μεγαλύτερη εφαρμογή asyncio μπορεί να κρατά αυτή τη σύνδεση ανοιχτή ενώ εκτελεί τις άλλες εργασίες της στον ίδιο βρόχο συμβάντων.

Σχετικά άρθρα