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 example@unixlinux.online exec socat - tcp\:devbox\:22',nofork

termine2:

$ ssh -p 12345 example@unixlinux.online

termine1:

example@unixlinux.online's password:

termine2:

example@unixlinux.online'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 example@unixlinux.online exec socat - tcp\:devbox\:22' tcp-listen:12345,reuseaddr
    example@unixlinux.online's password:

termine2:

    $ ssh -p 12345 example@unixlinux.online
    example@unixlinux.online'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 example@unixlinux.online
    example@unixlinux.online's password:

termine2:

    $ socat tcp-listen:12345,reuseaddr,fork exec:'ssh -o ControlPath=~/mysshcontrolsocket example@unixlinux.online exec socat - tcp\:devbox\:22'

termine3:

    $ ssh -p 12345 example@unixlinux.online
    example@unixlinux.online'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 example@unixlinux.online
example@unixlinux.online's password:

termine2:

$ socat tcp-listen:12345,reuseaddr,fork 'exec:ssh -T -o ControlPath=~/mysshcontrolsocket example@unixlinux.online '\''exec bash -c \'\''"exec 2>/dev/null 8<>/dev/tcp/devbox/22; cat <&8 & cat >&8"\'\'\'

termine3:

$ ssh -p 12345 example@unixlinux.online
example@unixlinux.online'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 example@unixlinux.online "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