Come gestire i tunnel come processi in background da uno script di shell?

14

Ho bisogno di creare un paio di ssh-tunnels da uno script di shell. Ho provato a eseguirli come bg usando:

#!/bin/sh
ssh -L 3000:server1:5029 me@server2 &
ssh -L 3001:server3:3306 me@server2 &

ma i tunnel non sembrano funzionare correttamente quando li lancio in quel modo.

Funzionano bene quando li imposto manualmente nelle proprie schede, quindi la mia prossima idea è di aprire lo script in nuove schede in Terminal e di eseguire i comandi lì come processi in primo piano.

Nota: questa domanda era originariamente "Come posso avviare una nuova scheda del terminale dalla shell e quindi eseguirne un comando?", ma ho ricevuto due risposte su come trattare con i tunnel. Per la domanda "aprire una shell", ho trovato questo su SuperUser , che funzionerà, sebbene le nuove schede in background siano preferibili alle finestre in primo piano che apre.

    
posta sprugman 31.08.2011 - 23:21
fonte

2 risposte

21

Questa non è tecnicamente una risposta alla domanda posta, ma piuttosto una risposta al tuo problema come descritto. Il comando ssh ha due opzioni che potrebbero esserti utili:

ssh -f -N -L 3000:server1:5029 me@server2

dice a ssh di rimanere in primo piano per il tempo sufficiente a chiedere le password necessarie e poi a mettersi in secondo piano, senza eseguire alcun comando remoto ma semplicemente gestendo il tunnel.

Se vuoi davvero che questo appaia in una scheda, potresti volere una soluzione diversa.

    
risposta data 01.09.2011 - 02:08
fonte
6

Suggerirei semplicemente di integrare i tuoi tunnel nella tua connessione "uno per qualsiasi cosa". Puoi semplificare aggiungendo le voci appropriate al tuo file ~/.ssh/config :

Host server2
    HostName 10.1.1.1
    User me
    LocalForward 3000 127.0.0.1:5029
    LocalForward 3001 127.0.0.1:3306

Quindi puoi semplicemente accedere eseguendo:

> ssh server2

I tunnel dovrebbero apparire e iniziare a funzionare, lasciandovi una singola istanza SSH in cui fare "qualunque cosa". Se devi aprire una seconda connessione a server2 , potresti ricevere un errore, tuttavia:

> ssh server2
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3001
Could not request local forwarding.

Questo non ferisce nient'altro che i tuoi occhi. Puoi anche impostare questi forward per più server aggiungendo linee simili per altri server e tutto avverrà automaticamente.

    
risposta data 02.09.2011 - 17:38
fonte

Leggi altre domande sui tag