Je souhaite accéder à un ordinateur, disons à la machine A, située dans le réseau de mon université. Cependant, cet ordinateur n’est accessible que via le réseau interne de l’université, je ne peux donc pas utiliser SSH directement sur cet ordinateur depuis chez moi.
Voici ce que je fais maintenant:
Connectez-vous à une autre machine universitaire, disons la machine B
(Cette machine B est accessible via SSH à partir de mon ordinateur personnel.)
Utilisez SSH sur B pour vous connecter à A.
Y a-t-il un moyen de le faire plus rapidement? Utiliser une seule commande ssh.
networking
ssh
remote-access
tunnel
Nikosdi
la source
la source
Réponses:
Oui, en utilisant
ProxyCommand
dans votre configuration SSH.Créez un fichier de configuration SSH dans votre répertoire de base (à moins que vous ne souhaitiez configurer ce système dans son intégralité)
~/.ssh/config
:Vous pouvez maintenant accéder directement à la machine A en utilisant
Notez également que vous disposez désormais d'un nom de cible d'hôte SSH unique, que vous pouvez également utiliser dans d'autres applications. Par exemple:
SCP pour copier des fichiers.
Dans vos applications graphiques:
utiliser
sftp://user@internalmachine/
comme emplacement pour naviguer sur la machine.Basé sur KDE (Dolphin): utilisation
fish://user@internalmachine/
Remarques
Modifiez
hostname.or.IP.address.internal.machine
et le port (22
) sur la machine que vous souhaitez atteindre, comme si vous le vouliezunibroker
.Selon les versions de netcat sur l'hôte unibroker, l'
-q0
option doit être omise. En ce qui concerne l'authentification; vous configurez essentiellement deux connexions SSH à partir de votre poste de travail. Cela signifie que l'hôte unibroker et l'hôte internalmachine sont vérifiés / authentifiés l'un après l'autre (pour la vérification de la paire de clés / mot de passe et la clé de l'hôte).Explication
Cette approche de l'utilisation de
ProxyCommand
et 'netcat' n'est qu'un moyen de le faire. J'aime cela, car mon client SSH parle directement à la machine cible pour que je puisse vérifier la clé de l'hôte auprès de mon client et que je puisse utiliser l'authentification de ma clé publique sans utiliser une autre clé sur le courtier.Chacun
Host
définit le début d'une nouvelle section hôte.Hostname
est le nom d'hôte ou l'adresse IP cible de cet hôte.User
est ce que vous fourniriez en tant que partie utilisateurssh user@hostname
.ProxyCommand
sera utilisé comme tuyau vers la machine cible. En utilisant SSH sur la première machine et en configurant directement un simple 'netcat' (nc
) vers la cible à partir de là, il ne s'agit en fait que d'un texte en clair transmis à la machine interne par le courtier entre ceux-ci. Les-q
options sont de désactiver toute sortie (juste une préférence personnelle).Assurez-vous que Netcat est installé sur le courtier (généralement disponible par défaut sous Ubuntu) - netcat-openbsd ou netcat-traditional .
Notez que vous utilisez toujours SSH avec le cryptage deux fois ici. Alors que le canal netcat est en texte clair, votre client SSH sur votre PC configurera un autre canal crypté avec la machine cible finale.
la source
Hop d'un coup
Une alternative évidente à l'approche ProxyCommand que j'ai fournie dans mon autre réponse serait de "sauter" directement sur la machine cible:
Notez le
-t
sur la premièressh
commande. Sans cela, il échouera:Il va obliger à attribuer un vrai TTY
L'inconvénient est que toute la configuration, la vérification et l'authentification ont maintenant lieu sur la machine B, ce que je n'aime pas du tout dans ma situation pour des raisons de sécurité. J'aime mon clavier sur mon propre PC et authentifie et vérifie la machine cible finale à partir de mon propre PC. En outre, vous ne pouvez utiliser le shell interactif que pour SSH, ce qui ne traitera pas d'autres outils tels que SCP ou l'utilisation de votre gestionnaire de fichiers GUI.
Pour toutes les raisons susmentionnées, je recommande fortement l’approche ProxyCommand , mais pour une connexion rapide, cela fonctionne bien.
la source
Vous pouvez utiliser l'
-J
option de ligne de commande:De
man ssh
:Il a été introduit dans OpenSSH version 7.3 (publié en août 2016). Il est disponible dans Ubuntu 16.10 et versions ultérieures.
la source
Essayez d'utiliser
dans votre ~ / .ssh / config et faites tout en un avec les touches uniquement sur votre ordinateur.
la source
B
machine.C'est une suggestion très utile. Après des heures de travail, j'ai trouvé cette note et confirmé que cela fonctionnait exactement comme indiqué. Pour vous connecter via MachineA à MachineB, à partir de la machine distante:
par exemple: [xuser @ machineC ~] ssh -t MachineA ssh MachineB
Le "-t" est critique, ssh échoue s'il n'est pas présent. Vous serez invité à deux reprises, un mot de passe sur MachineA, puis une seconde fois sur MachineB. Notez également que cela suppose que l'utilisateur "xuser" soit défini sur les trois ordinateurs. Sinon, utilisez simplement la syntaxe ssh: "yuser @ MachineA ...". Notez également que vous pouvez utiliser des adresses IP brutes quadruples en pointillés, si vous le souhaitez. Ceci est utile si vous vous connectez à un réseau local privé qui utilise des adresses IP non exposées au monde - c'est-à-dire. pas dans votre fichier hôte local, ni dans aucun DNS. Pour obtenir un fichier de MachineB, vers une machine distante, vous pouvez passer de MachineB à MachineA, puis de MachineA vers une machineC distante. (Par exemple, la machineC distante peut envoyer un ping à MachineA, mais pas à MachineB.) Avertissement: j'ai testé avec Fedora et Windows XP, MachineA est un XP-Box exécutant ICS (Internet Connection Sharing), tandis que MachineB et machineC distante sont des boîtes Fedora-Linux. Cette suggestion a résolu un problème clé pour moi - c'est-à-dire. accès à distance restreint et surveillé à mon réseau distant. Notez également que lorsque vous vous "déconnectez" de MachineB, vous devriez voir deux "Connexion à xxx.xxx.xxx.xxx fermée". messages.
la source
-t
est toujours nécessaire.ProxyCommand est une solution propre pour un cas où vous autorisez l'accès au shell dans les deux systèmes. Nous voulions donner aux utilisateurs distants l'accès à une machine interne (A) par le biais d'un courtier (B), mais sans lui permettre d'accéder au shell à B pour améliorer la sécurité. Cela a fonctionné:
Remplacer le shell de connexion
Remplacez le shell de connexion (utilisez
chsh
)extuser
sur le courtier par le script suivant (stocké dans un fichier):Si aucun identifiant de mot de passe n'a été défini dans extuser @ B pour l'utilisateur distant et dans internaluser @ A pour extuser @ B, l'exécution de la commande suivante mènera directement l'utilisateur distant à A
Conseil : Créez la configuration nécessaire avec mot_de_passe_auto-autorisée, authorised_keys dans extuser @ B avant de passer au shell de connexion personnalisé. Après la modification, étant donné que ce compte est inaccessible à tous via un shell, seul un sudoer @ B peut modifier le fichier allowed_keys en le modifiant directement.
La dernière ligne est de supprimer l'affichage de la bannière de connexion de B, afin que l'utilisateur distant ait un accès transparent à A.
la source
Vous voulez dire que vous avez besoin de plusieurs cavaliers :)
Récemment, j'ai rencontré ce problème avec jumper1 jumper2 et ma dernière machine, comme pour mon sol
script local:
puis sur le 1er cavalier (qui est mon routeur), j'ai placé un script nommé Y00.sh:
Vous pouvez les remplacer par votre adresse IP et vos mots de passe, bonne chance!
la source