Transfert d'agent SSH en utilisant différents noms d'utilisateur et différentes clés

18

Il y a une question très similaire qui, si elle avait été répondue, aurait pu être la réponse à cette question. Malheureusement, il s'agit d'un "pas besoin de répondre à la question que j'ai posée parce que le problème n'était pas ce que je pensais qu'il était."

La mise en place

  1. Le serveur bastion.ec2 accepte une connexion ssh depuis mon poste de travail viassh -i mykey.pem [email protected]
  2. Le serveur service1.ec2 accepte les connexions ssh uniquement à partir de bastion.ec2 viassh -i sharedkey.pem [email protected]

Les exigences

  1. Les deux clés ne se trouvent que sur mon poste de travail, donc je ne peux pas réellement exécuter la 2e commande sans copier la clé
  2. Pour des raisons de sécurité, je souhaite utiliser le transfert d'agent ssh plutôt que de copier les clés ssh sur bastion.ec2

La solution

C'est là que vous intervenez. Comment puis-je transférer une clé différente pour la 2e connexion?

Si shareduser avait mykey.pub, ~/.ssh/authorized_keyscela fonctionnerait:

ssh -i mykey.pem [email protected] ssh [email protected]

Cependant, je ne veux pas que chaque utilisateur doive mettre sa clé publique sur chaque serveur.

Bruno Bronosky
la source

Réponses:

21

Étape 1

Assurez-vous que votre agent local est prêt

Ce n'est pas parce que vous pouvez ssh dans votre serveur bastion sans spécifier votre chemin de clé ou être invité à entrer le mot de passe que votre agent ssh est en cours d'exécution et détient votre clé. Certains systèmes d'exploitation modernes (par exemple: OSX) gèrent cela pour vous.

Sur votre machine locale

$ ssh-add -L
ssh-rsa ObahfCbvagGbLbhSbeHfvatEBG13== ~/.ssh/mykey.pem
ssh-rsa LbhNerWhfgJnnlGbbPyrireEBG13== ~/.ssh/sharedkey.pem

Fig. 1

Cela signifie que votre agent est en cours d'exécution et possède votre clé.

$ ssh-add -L
The agent has no identities.

fig.2

Cela signifie que vous n'avez ajouté aucune clé à votre agent. Corrigez cela avec:

ssh-add ~/.ssh/mykey.pem ~/.ssh/sharedkey.pem

fig.3

Étape 2

Assurez-vous que votre agent distant est prêt

SSH dans votre serveur bastion et répétez la vérification des fig.1 et fig.2 . Cependant, l'erreur que vous êtes le plus susceptible d'obtenir est la suivante:

$ ssh-add -L
Could not open a connection to your authentication agent.

fig.4

Cela signifie très probablement que votre client SSH ne transfère pas votre connexion d'agent d'authentification.

Vous pouvez forcer cela avec l' -Aindicateur (tant que la configuration sshd sur le serveur le permet, ce qui est la valeur par défaut ).

$ ssh -A bastion.ec2

fig.5

Étape 3

Assurez-vous que vous utilisez les bonnes touches

Si vous avez ajouté des clés à votre agent, votre agent transfère et votre agent distant répertorie vos clés locales. Il n'y a que deux raisons probables pour lesquelles vous n'obtenez pas de connexion. Soit vous n'utilisez pas la bonne clé, soit vous n'utilisez pas le bon nom d'utilisateur.

Sortez l'homologue public sur votre clé privée:

$ cd
$ cd .ssh
$ ssh-keygen -y -f mykey.pem
ssh-rsa ObahfCbvagGbLbhSbeHfvatEBG13
$ ssh-keygen -y -f sharedkey.pem
ssh-rsa LbhNerWhfgJnnlGbbPyrireEBG13

fig.6

Ceux - ci devraient être les mêmes que ce que vous voyez de ssh-add -Ljusqu'à la ==proximité de la fin.

Maintenant, d'une manière ou d'une autre, vous devez entrer dans la boîte à laquelle vous ne parvenez pas à vous connecter et regarder le contenu du $HOME/.ssh/authorized_keysfichier pour l'utilisateur auquel vous essayez de vous connecter. Vous devez vous assurer que la clé publique que vous sortez avec la commande ci-dessus se trouve dans ce fichier sur une ligne seule. Vous ne pouvez pas croire que les sharedkey.pubcubes Bro 2 vous ont envoyé un e-mail. Vérifier! Cela peut nécessiter d'obtenir quelqu'un d'autre qui peut se connecter en tant qu'utilisateur pour vous obtenir le fichier authorized_keys ou obtenir un accès root. Si vous êtes allé si loin et que cela ne fonctionne toujours pas, vous êtes au-delà des raccourcis.

Étape 4

Rendre facile

J'espère que les étapes ci-dessus vous ont permis de commencer. Maintenant, faisons disparaître ce mal de tête aussi longtemps que vous utilisez ce poste de travail.

Configurez votre client ssh local

Host *
    # A lot of people put an IdentityFile line in this Host * section.
    # Don't do that unless you will use only 1 key everywhere forever.
    #IdentityFile id_rsa

Host bastion.ec2
    # You want to make sure you always forward your agent to this host.
    # But don't forward to untrusted hosts. So don't put it in Host *
    ForwardAgent yes
    # Go a head and put the IP here in case DNS ever fails you.
    # Comment it out if you want. Having it recorded is a good backup.
    HostName 172.31.0.1
    # You don't want to create a proxy loop later, so be explicit here.
    ProxyCommand none
    # SSH should try using all keys in your .ssh folder, but if you
    # know you want this key, being explicit speeds authentication.
    IdentityFile ~/.ssh/mykey.pem

# Connect effortlessly by hostname or IP address
# This assumes that your internal DNS uses the fake TLD ec2
# This assumes that 172.31.0.0 is your C-Class subnet
Host *.ec2 172.31.*
    # This command says proxy all ssh connections through bastion as if
    # you had done an ssh -A
    ProxyCommand ssh -W %h:%p bastion.ec2
    ForwardAgent yes
    # These next lines are documentation you leave as a love letter to
    # your future self when all else fails or you have to help a
    # coworker and decide to look at your own config.
    # ssh-add ~/.ssh/*.pem
    # ssh -At bastion.ecs ssh [email protected]

fig.7

Si vous ne retirez rien d'autre de la fig.7, cela devrait être la bonne utilisation de ProxyCommand& ForwardAgent.

Remplissez automatiquement votre .bash_profile

Vous ne voulez pas avoir à faire ssh-addmanuellement chaque fois que vous vous connectez à votre machine. ~/.bash_profileest un script qui s'exécute à chaque connexion **. Mettez la ligne de la fig. 3 là-dedans et vous devriez toujours avoir votre agent prêt.

** Ne confondez pas cela avec celui .bashrcqui s'exécute pour chaque nouveau terminal [interactif]. Votre agent continue de fonctionner même si vous fermez toutes vos sessions de terminal. Pas besoin de recharger vos clés

Alternative à l'utilisation de .bash_profile

J'ai également créé un résumé qui ajoute un agent de lancement OSX / macOS . Vous pouvez utiliser cette méthode pour démarrer votre ssh-agentdémarrage. Il est très simple à installer:

curl -sSL https://gist.github.com/RichardBronosky/429a8fff2687a16959294bcee336dd2a/raw/install.sh | bash
Bruno Bronosky
la source
Étape 2: vous ne pouvez pas forcer ForwardAgent yesavec -Asi l'hôte ne le permet pas.
dlamblin
Merci @dlamblin, j'ai ajouté les informations pertinentes et un lien vers la documentation sshd.
Bruno Bronosky
1

C'est là que vous intervenez. Comment puis-je transférer une clé différente pour la 2e connexion?

Vous ne transférez pas les clés. Vous transférez l'agent et il peut avoir des clés complètement indépendantes de celles que vous utilisez pour l'authentification lors du premier saut. Vérifiez les clés de votre agent à l'aide de ssh-add -L.

Mais encore mieux, exécutez la connexion sur ProxyCommand ssh -W %h:%p [email protected], ce qui évitera la nécessité de transmettre l'agent, le tas ou les options de ligne de commande et la nécessité d'authentifier de l'hôte immédiat.

Vous pouvez simplement mettre cela dans votre configuration (voir man ssh_config).

Jakuje
la source
1
Heureusement, je sais de quoi vous parlez ici, mais pas l'utilisateur moyen. Vous discutez de la sémantique avec votre chose "vous transférez des agents, pas des clés". Vous m'avez donné suffisamment pour continuer et j'ai pu résoudre ce problème. Je veux donc vous donner la possibilité de corriger votre réponse avant d'ajouter la mienne. Astuce: ssh-add mykey.pem sharedkey.pempuis confirmez ssh-add -Lensuitessh -At [email protected] ssh [email protected]
Bruno Bronosky