J'ai configuré le transfert de port ssh et routeur afin que je puisse ssh dans un ordinateur sur mon réseau domestique lorsque je ne suis pas à la maison. Actuellement, j'ai deux entrées dans mon .ssh/config
fichier, une pour quand je suis sur mon réseau domestique et une pour quand je ne suis pas:
Host mycomputer
HostName 192.168.X.X
Host mycomputerathome
HostName my.no-ip.dynamic
Cela fonctionne mais je me demande si je peux me faciliter les choses. J'espérais qu'il existe un moyen de répertorier plusieurs entrées HostName de telle sorte que si la première échoue, elle revient à la seconde:
Host mycomputer
HostName 192.168.X.X
HostName my.no-ip.dynamic
Pour qu'il essaie d'abord de se connecter à un hôte sur mon réseau local et s'il n'est pas présent, il essaiera de se connecter en utilisant mon nom d'hôte dynamique sans IP. J'ai essayé d'entrer deux HostNames mais en exécutant ssh mycomputer
juste des blocs sans rien faire.
J'ai désactivé l'authentification par mot de passe en faveur des clés, donc la connexion accidentelle à un ordinateur sur le réseau local lorsque je ne suis pas sur mon réseau domestique ne devrait pas risquer que mon mot de passe aille partout où il ne devrait pas.
Est-il possible de spécifier des HostNames de secours pour essayer si le premier ne fonctionne pas?
.ssh/config
peut exécuter des scripts pour certaines propriétés. Je sais que vous pouvez le faire avec ProxyCommand. Vous pouvez faire quelque chose comme indiqué dans ce Q&R de SF - serverfault.com/questions/401233/… .Réponses:
C'est moche, mais je pense que vous pouvez le faire en utilisant le
exec
critère deMatch
l'état de sortie d'un port, par exempleNotez que cela ne peut pas vraiment dire si vous êtes sur "votre" réseau domestique - juste que vous êtes sur un segment LAN privé avec la même plage d'adresses qui se trouve avoir un service d'écoute sur la même adresse / port.
la source
-w 1
sinon il anc
semblé attendre toujours. Ce qui pourrait être plus simple, c'est le deuxième match,Match exec "true"
car si le premier match a échoué, essayez simplement le deuxième choix à l'aveuglette.Match
n'a pas deElse
)ssh xyz.com
leMatch exec "true"
capturer et de me rediriger vers mon serveur domestique en utilisant mon nom d'hôte distant. J'essaierai avec votre directeur mais je pense que la même chose se produira.Match exec... Match !exec
fait que ssh'ing vers d'autres domaines déclenche leMatch !exec
et réécrit le HostName.~/.ssh/config
on ne peut pas se soucier de l'indentation. Certaines commandes réinitialisent la portée, c'est-à-dire que chaque nouvelle ligne d'hôte dit "les lignes précédentes étaient pour l'hôte précédent, les lignes suivantes sont pour ce nouvel hôte". Il s'avère qu'ilMatch
a le même pouvoir de «réinitialisation de la portée» que l'hôte. Pour tenir compte de cela, j'ai remplacé ma ligne hôte parMatch Host mycomputer exec "nc -w 1 -z 192.168.X.X 22"
et défini toutes les valeurs personnalisées pour mon réseau local. J'ai ensuite ajouté une ligne correspondante sauf!exec
et ajouté toutes les valeurs pour quand je suis hors réseau. Maintenant, cela fonctionne bien pour tous les hôtes.J'utilise comme ça.
ssh_config n'a pas quelque chose comme un bloc d'indentation. Si vous souhaitez limiter la phrase de correspondance à un hôte spécifique, vous devez décrire la condition complète.
Vous pouvez éviter l'attente longue
nc
en lui donnant l'-G 1
option (timeout de connexion 1s), et vous pouvez utiliser le comportement suivant pour éviter l'invocation multiple denc
https://www.freebsd.org/cgi/man.cgi?sshd_config(5)
la source
Non; si vous spécifiez plusieurs
HostName
s pour uneHost
entrée, seule la première sera reconnue:la source
ssh mycomputer
il devrait être assez clair à quel ordinateur je me connecte.