Connessioni SSH di Fabric 2+ attraverso un proxy SOCKS
Usate il gateway ProxyCommand di Fabric con un connettore compatibile SOCKS, mantenendo l'autenticazione SSH legata alla destinazione.
I comandi remoti di Fabric viaggiano su SSH. Per portare quella connessione SSH attraverso un server SOCKS, date a Fabric un connettore che parla SOCKS e restituisce il flusso di byte della destinazione.
L'API Connection introdotta in Fabric 2 accetta una stringa di comando come proprio gateway. Fabric usa quella stringa come ProxyCommand. Con un nc compatibile OpenBSD che supporta le sue opzioni proxy, la configurazione può essere:
from fabric import Connection
connection = Connection(
"app.example.net",
user="deploy",
gateway="nc -X 5 -x proxy.example.net:1080 %h %p",
)Questo esempio usa la porta SSH normale, 22. Il -X 5 del connettore seleziona SOCKS5, mentre -x identifica l'endpoint del proxy. I segnaposto per host e porta forniscono la destinazione SSH. Per una destinazione SSH pubblica, un endpoint non autenticato dalla lista di proxy SOCKS5 può riempire l'indirizzo del proxy se consente quella destinazione e quella porta. Configurate il comando con le opzioni del connettore realmente installato sulla macchina; i programmi chiamati nc non espongono tutti la stessa interfaccia.
Il connettore viene eseguito localmente, dove viene eseguito Fabric. Il server applicativo non ha bisogno di quell'aiutante solo perché è la destinazione SSH. Una volta stabilito il flusso, Fabric esegue comunque la negoziazione SSH e autentica l'account deploy su app.example.net. Qualsiasi autenticazione richiesta dal server SOCKS appartiene al connettore e deve essere supportata da esso.
Fabric può anche leggere un ProxyCommand dalla configurazione SSH. Può essere comodo quando lo stesso percorso è usato da più strumenti SSH. Usate un'unica definizione di gateway prevista per la connessione, invece di combinare un gateway in stile comando con un gateway host di salto separato per la stessa destinazione.
Quando l'intermediario è un server SSH
Un oggetto Connection di Fabric fornito come gateway significa qualcosa di diverso: Fabric si connette a quel gateway SSH e richiede un canale verso l'host finale. Usate quella forma per un host di salto SSH. Un listener SOCKS non è un server SSH, quindi ha bisogno del connettore in stile comando qui sopra.
Questa scelta di trasporto ha anche un limite chiaro. Instrada la connessione SSH di Fabric. Un comando eseguito sull'host remoto che in seguito scarica un repository o un pacchetto crea una nuova connessione in uscita da quell'host, secondo la configurazione proxy propria di quel programma.