GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire l'inoltro ssh con AllowTcpForwarding impostato su no?

Finché si può eseguire socat localmente e su gateway (o anche solo bash e cat su gateway , vedi l'ultimo esempio!) ed è consentito non usa un pty per essere pulito a 8 bit, è possibile stabilire un tunnel attraverso ssh. Ecco 4 esempi, migliorativi rispetto al precedente:

Esempio di base che funziona una volta

(averlo fork richiederebbe una connessione ssh per tunnel, non va bene). Dover sfuggire al : affinché socat accetti il ​​comando exec:

termine1:

$ socat tcp-listen:12345,reuseaddr exec:'ssh [email protected] exec socat - tcp\:devbox\:22',nofork

termine2:

$ ssh -p 12345 [email protected]

termine1:

[email protected]'s password:

termine2:

[email protected]'s password: 

L'inversione del primo e del secondo indirizzo rende il socket immediatamente disponibile

socat deve rimanere al comando, quindi niente nofork :

termine1:

    $ socat exec:'ssh [email protected] exec socat - tcp\:devbox\:22' tcp-listen:12345,reuseaddr
    [email protected]'s password:

termine2:

    $ ssh -p 12345 [email protected]
    [email protected]'s password:

Utilizzando un ControlMaster sst

consente il fork mentre si utilizza una sola connessione ssh al gateway, dando così un comportamento simile al solito port forwarding:

termine1:

    $ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket [email protected]
    [email protected]'s password:

termine2:

    $ socat tcp-listen:12345,reuseaddr,fork exec:'ssh -o ControlPath=~/mysshcontrolsocket [email protected] exec socat - tcp\:devbox\:22'

termine3:

    $ ssh -p 12345 [email protected]
    [email protected]'s password:

Avere solo bash e cat disponibile su gateway

Usando bash e due cat half-duplex comandi (per un risultato full-duplex) non è nemmeno necessario un socat remoto o netcat . La gestione di più strati di virgolette nidificate e sfuggite è stata un po' scomoda e forse può essere fatta meglio, o semplificata con l'uso di un bash remoto copione. Bisogna fare attenzione ad avere il biforcuto cat solo per l'output:

term1 (nessuna modifica):

$ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket [email protected]
[email protected]'s password:

termine2:

$ socat tcp-listen:12345,reuseaddr,fork 'exec:ssh -T -o ControlPath=~/mysshcontrolsocket [email protected] '\''exec bash -c \'\''"exec 2>/dev/null 8<>/dev/tcp/devbox/22; cat <&8 & cat >&8"\'\'\'

termine3:

$ ssh -p 12345 [email protected]
[email protected]'s password:

Sostituisci ProxyJump con Bash

L'idea sopra è buona! Ecco la mia versione generica di ssh_config quando ProxyJump non funziona perché AllowTcpForwarding impostato su no e la mia shell predefinita è BASH:

ProxyCommand=ssh -T [email protected] "exec 3<>/dev/tcp/%h/%p 2<&- ; cat <&3 & cat >&3 ; kill $!"
  • -T Disabilita l'allocazione pseudo-terminale
  • exec Non verrà creato alcun nuovo processo (bash)
  • 3<> è semplicemente il reindirizzamento a un descrittore di file disponibile
  • /dev/tcp/... chiederà a bash di aprire il socket TCP corrispondente.
  • %h e %p verrà valutato dal tuo client OpenSSH come devbox e 22
  • 2<&- chiuderà lo STDERR (potresti anche reindirizzarlo a /dev/null)
  • gatto <&3 & leggerà il descrittore di file selezionato 3 in background
  • gatto>&3 scriverà il nostro descrittore di file in primo piano
  • uccidi $! ucciderà il gatto <&3 "che legge". comando in esecuzione in background quando chiudi/interrompi la connessione. Altrimenti continuerebbe a funzionare.

Potrebbe sostituire ProxyJump per me in situazioni in cui era disabilitato sul jump server, ma non volevo davvero inoltrare lì la mia chiave privata o inserire password senza un ulteriore livello di crittografia. Usare altri SSH_AUTH_SOCK come root o registrare le sessioni del terminale completamente con le sequenze di tasti sono entrambe cose reali.

Ma per favore, assicurati sempre di non violare le norme che ti riguardano!


Linux
  1. Come configurare il tunneling SSH

  2. Come impostare le chiavi SSH

  3. Come impostare l'inoltro web

  4. Procedura:per iniziare con Ansible

  5. Come configurare le chiavi SSH su Debian

Come trasferire file con Rsync su SSH

Come configurare il port forwarding dinamico SSH su Linux

Come impostare l'inoltro e-mail in cPanel

Come configurare un firewall con GUFW su Linux

Come configurare SSH su CentOS e RHEL

Come proteggere SSH con Fail2Ban