3 votes

Répertoire actuel dans la configuration SSH

J'ai un projet qui contient tous les fichiers id_rsa et une configuration SSH, avec des entrées quelque chose comme ceci:

Host projectname-server-1
  User root
  Hostname 26.139.18.47
  IdentityFile ./certificates/server-1/id_rsa

L'idée est que l'utilisateur puisse inclure cette configuration depuis son fichier de configuration SSH principal comme ceci:

Include /home/myname/path-to-project/ssh-config

Et ensuite simplement exécuter ssh projectname-server-1 pour se connecter au serveur.

Le problème est que cela ne fonctionne que lorsque je suis dans le répertoire /home/myname/path-to-project.

Y a-t-il un moyen de spécifier un chemin relatif à l'emplacement du fichier de configuration?

4voto

harrymc Points 394411

Je ne crois pas qu'une variable de "répertoire actuel" existe.

La page de manuel ssh_config(5) - Linux liste cette syntaxe qui pourrait aider :

Le nom du fichier peut utiliser la syntaxe du tilde pour faire référence au répertoire personnel d'un utilisateur ou l'un des caractères d'échappement suivants : %d (répertoire personnel de l'utilisateur local), %u (nom de l'utilisateur local), %l (nom d'hôte local), %h (nom d'hôte distant) ou %r (nom d'utilisateur distant).

1voto

Jennifer95 Points 11

Il semble que ce que vous recherchez est un moyen de stocker toute votre configuration ssh et vos variables pour votre projet dans le répertoire du projet, et également que les chemins soient traités de manière relative à un fichier de configuration inclus ssh, plutôt qu'au chemin actuel.

La réponse courte est non - autant que je sache, les inclusions de ssh_config se comportent de manière similaire à un C #include - vous pouvez les traiter comme l'expansion du fichier référencé dans le fichier actuel.

Ceci étant dit, vous avez quelques options pour accomplir cela de manière extensible, avec un degré de convention - personnellement, je versionne beaucoup de mes configurations ssh, Ma meilleure suggestion est la suivante:

Sous la racine de votre projet, stockez vos configurations ssh sous un répertoire

mon_projet/
 _config.yml
 _ssh_config
    serveur-1
        id_rsa
        serveur-1.config
 src

3 répertoires, 3 fichiers

Écrivez serveur-1.config comme ceci:

Host nomduprojet-serveur-1
  User root
  Hostname serveur-1.example.com
  # Notre fichier d'identité se trouve dans le dossier sous ~/.ssh
  IdentityFile ~/.ssh/config.d/serveur-1/id_rsa

Sous ~/.ssh/ créez un nouveau dossier, config.d

mkdir -p ~/.ssh/config.d

Pour référencer vos fichiers ssh spécifiques au projet, vous pouvez créer un lien symbolique de mon_projet/_ssh_config/serveur-1 dans config.d

ln -s chemin/vers/mon_projet/_ssh_config/serveur-1 ~/.ssh/config.d/serveur-1

Mettez à jour votre directive Include dans ~/.ssh/config:

# Les chemins "Include" relatifs sont supposés être relatifs à ~/.ssh/
Include config.d/serveur-1/serveur-1.config

Maintenant, votre ~/.ssh ressemble à cela:

.ssh/
 config
 config.d
     serveur-1 -> /chemin/vers/mon_projet/_ssh_config/serveur-1/
         id_rsa
         serveur-1.config

2 répertoires, 3 fichiers

L'avantage de cette approche est que vous pouvez facilement l'étendre à serveur-2, 3, 4, etc., ou à d'autres projets. Il vous suffit de créer un lien symbolique de chemin/vers/serveur-x dans config.d, et vous pouvez utiliser des globules dans votre Include au niveau de l'utilisateur pour y veiller:

Include config.d/**/*.config

Je suggère que stocker des clés ssh dans le projet semble peu conventionnel, potentiellement dangereux et pas particulièrement utile. Si votre objectif est la portabilité de votre configuration, je suggère de faire une exception pour le chemin de votre clé privée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X