GNU/Linux >> Tutoriels Linux >  >> Linux

Comment effectuer un transfert ssh avec AllowTcpForwarding défini sur non ?

Tant qu'on peut exécuter socat localement et sur gateway (ou même juste bash et cat le gateway , voir le dernier exemple !) et est autorisé à ne pas utilisez un pty pour être 8 bits propre, il est possible d'établir un tunnel via ssh. Voici 4 exemples, améliorant le précédent :

Exemple de base fonctionnant une fois

(l'avoir fork nécessiterait une connexion ssh par tunnel, pas bon). Devoir échapper au : pour que socat accepte la commande exec :

terme1 :

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

terme2 :

$ ssh -p 12345 [email protected]

terme1 :

[email protected]'s password:

terme2 :

[email protected]'s password: 

Inverser les première et deuxième adresses rend le socket immédiatement disponible

socat doit rester en charge, donc pas de nofork :

terme1 :

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

terme2 :

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

Utiliser un ControlMaster chut

permet de bifurquer en n'utilisant qu'une seule connexion ssh à la passerelle, donnant ainsi un comportement similaire à la redirection de port habituelle :

terme1 :

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

terme2 :

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

terme3 :

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

N'ayant que bash et cat disponible sur gateway

En utilisant bash la redirection tcp intégrée de et deux cat semi-duplex commandes (pour un résultat full-duplex) on n'a même pas besoin d'une télécommande socat ou netcat . La gestion de plusieurs couches de guillemets imbriqués et échappés était un peu délicate et peut peut-être être mieux faite, ou simplifiée par l'utilisation d'un bash distant scénario. Il faut prendre soin d'avoir le cat fourchu pour la sortie uniquement :

terme1 (pas de changement) :

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

terme2 :

$ 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"\'\'\'

terme3 :

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

Remplacer ProxyJump par Bash

L'idée ci-dessus est bonne ! Voici ma version générique de ssh_config lorsque ProxyJump ne fonctionne pas parce que AllowTcpForwarding défini sur no et mon shell par défaut est BASH :

ProxyCommand=ssh -T [email protected] "exec 3<>/dev/tcp/%h/%p 2<&- ; cat <&3 & cat >&3 ; kill $!"
  • -T Désactiver l'allocation de pseudo-terminal
  • exécution Aucun nouveau processus (bash) ne sera créé
  • 3<> est simplement une redirection vers un descripteur de fichier disponible
  • /dev/tcp/... demandera à bash d'ouvrir le socket TCP correspondant.
  • %h et %p sera évalué par votre client OpenSSH en tant que devbox et 22
  • 2<&- fermera le STDERR (vous pouvez aussi le rediriger vers /dev/null)
  • chat <&3 & lira le descripteur de fichier sélectionné 3 en arrière-plan
  • chat>&3 écrira notre descripteur de fichier au premier plan
  • tuez $ ! tuera le chat <&3 "lecteur" commande s'exécutant en arrière-plan lorsque vous fermez/interrompez la connexion. Sinon, il continuerait à fonctionner.

Cela pourrait remplacer ProxyJump pour moi dans les situations où il était désactivé sur le serveur de saut, mais je ne voulais vraiment pas y transférer ma clé privée ou entrer des mots de passe sans un niveau de cryptage supplémentaire. Utiliser d'autres SSH_AUTH_SOCK en tant que root ou enregistrer complètement des sessions de terminal avec des frappes au clavier sont deux choses réelles.

Mais s'il vous plaît, assurez-vous toujours de ne pas enfreindre les politiques qui s'appliquent à vous !


Linux
  1. SSH vers un port autre que 22 :comment le faire (avec exemples)

  2. Comment définir la date avec le format d'époque ?

  3. Comment configurer la redirection Web

  4. Comment désactiver la connexion SSH avec un mot de passe

  5. Guide pratique :Premiers pas avec Ansible

Comment transférer des fichiers avec Rsync sur SSH

Comment configurer le transfert de port dynamique SSH sous Linux

Comment configurer le transfert d'e-mails dans cPanel

Comment configurer un pare-feu avec GUFW sous Linux

Comment configurer SSH sur CentOS et RHEL

Comment sécuriser SSH avec Fail2Ban