Risposte:
È molto semplice con le versioni abbastanza recenti di OpenSSH se pianifichi in anticipo.
Aprire una connessione principale la prima volta. Per le connessioni successive, instradare le connessioni slave attraverso la connessione master esistente. Nel tuo ~/.ssh/config, imposta la condivisione della connessione in modo che avvenga automaticamente:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
Se avvii una sessione ssh sullo stesso (utente, porta, macchina) di una connessione esistente, la seconda sessione verrà incanalata sulla prima. Stabilire la seconda connessione non richiede alcuna nuova autenticazione ed è molto veloce.
/var/log/securee /var/log/auth.logregistra le connessioni SSH; una connessione slave non appare lì perché si trasporta su una connessione esistente. Se la sessione ssh alloca un terminale (cioè ssh somehostsenza alcun comando fornito, o ssh -t), che è (normalmente) registrato wtmp, indipendentemente da come appariva quel terminale (sshd qualunque metodo è stato usato per stabilire la connessione, l'applicazione dell'emulatore di terminale, ...).
ControlPersist 600un ritardo in secondi in cui il socket è inattivo prima che venga eliminato automaticamente. Altrimenti si chiuderà automaticamente al termine della connessione principale. Non va bene per l'esecuzione remota di una serie di comandi (ad es. Una serie di comandi rsync in cartelle diverse)
-S(specificare socket) e -M(creare una connessione master) del client SSH.
È abbastanza facile da ottenere utilizzando lo strumento nc e i tunnel ssh.
Nella tua sessione SSH, digita ~Csu una nuova riga. Verrà visualizzato il prompt ssh "console di servizio" che assomiglia a questo:
ssh>
Digita il comando forward locale per aprire un tunnel ssh:
ssh> -L22000:targethost:22001
Forwarding port.
Dove si targethosttrova il nome host o l'indirizzo IP della macchina a cui sei connesso.
Ora, supponendo che il server SSH sul computer di destinazione non sia configurato per vietare i tunnel, hai l'inoltro di connessione desiderato: il sshclient sul tuo computer è in ascolto sulla porta 22000 e inoltrerà tutto il traffico inviato alla porta 22001 su targethost.
Questo è semplice come entrare nella sessione ssh già aperta il seguente comando:
remote$ nc -l localhost 22001 | sh
Questo avvierà un server TCP in ascolto sulla porta 22001 - che è la porta di destinazione del nostro tunnel ssh - e instraderà i dati ricevuti (presumibilmente, comandi di shell) a targethostun'istanza di shell.
local$ cat yourscript.sh | nc localhost 22000
Questo invierà il corpo dello script al tuo tunnel SSH e finirà per essere eseguito in una shell sul targethost. Vedrai l'output dello script nel tuo terminale con sessione ssh.
Noterò anche che il tunnel ssh (passaggio 1) in questo scenario non è strettamente richiesto; puoi anche avviare il server aperto e collegarti direttamente tramite Internet. Tuttavia, sarà necessario utilizzare il tunnel se l'host di destinazione non può essere raggiunto direttamente (ad es. Dietro un NAT), o se si desidera la crittografia ssh.
~personaggio deve seguire una nuova riga, quindi LF ~ Cprobabilmente è una sequenza migliore.
less, il comune cercapersone predefinito, supporta la ricerca che può salvarti un po 'di scorrimento se conosci le tue parole chiave: basta digitare man ssh /ESCAPEe sei lì.