{"id":536,"date":"2022-04-27T11:30:56","date_gmt":"2022-04-27T11:30:56","guid":{"rendered":"https:\/\/blogs.ua.es\/jpm33\/?p=536"},"modified":"2023-06-30T07:37:22","modified_gmt":"2023-06-30T07:37:22","slug":"configurar-ssh-para-usar-diferentes-pares-de-claves-con-bitbucket-y-otros-servicios-git","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/jpm33\/2022\/04\/27\/configurar-ssh-para-usar-diferentes-pares-de-claves-con-bitbucket-y-otros-servicios-git\/","title":{"rendered":"Configurar SSH para usar diferentes pares de claves con bitbucket y otros servicios git [ACTUALIZADO]"},"content":{"rendered":"<h1>Introducci\u00f3n<\/h1>\n<p>Normalmente uso git como herramienta de control de c\u00f3digo fuente. Por lo general el escenario que me he encontrado es una \u00fanica cuenta en mi equipo. Ya que en equipo personal hago mis pruebas con bitbucket y en el trabajo con el servidor GIT que ponga a mi disposici\u00f3n la empresa.<\/p>\n<p>En la actualidad, trabajo con un servidor GIT centralizado pero algunas entidades con las que colaboramos en el trabajo tienen sus propios servidores GIT. Esto plantea un escenario nuevo. Ya que si usas git sobre protocolo HTTP te da igual pero hoy en d\u00eda por cuestiones de seguridad es muy recomendable SSH y en este caso es donde aparece el &#8220;problema&#8221;.<\/p>\n<p>No es un problema, claro, pero para poder trabajar contra varios servidores con claves de acceso RSA para SSH diferentes es necesario configurar un poco el equipo. El siguiente ejemplo lo he hecho en Windows 10 con Git Bash pero en un shell de GNU\/Linux o macOS sugpongo que ir\u00e1 igual (o muy parecido).<\/p>\n<p><!--more--><\/p>\n<h1>Escenario<\/h1>\n<p>Para evitar usar URLS reales (cosa que no puedo) vamos a suponer que dispongo de uno o mas servidores git de mi empresa, para los cuales tengo un usuario \u00fanico y una pareja de claves SSH generadas <strong>(id_rsa<\/strong> y <strong>id_rsa.pub<\/strong>) en mi directorio ~.\/ssh.<\/p>\n<p>Ocurre que ahora he de comunicarme con un servidor nuevo que est\u00e1 fuera de mi entorno habitual, por ejemplo bitbucket.org. En este caso mis claves <strong>(id_rsa<\/strong> y <strong>id_rsa.pub<\/strong>) no me sirven para acceder a al protocolo <strong>git+ssh<\/strong>,<\/p>\n<h1>Soluci\u00f3n<\/h1>\n<h2>Parte 1, nuevas claves<\/h2>\n<p>La primera parte es sencilla, consiste en generar unos ficheros de claves nuevos<\/p>\n<p>Ejecutamos el comando <strong>ssh-keygen<\/strong> e indicamos que queremos crear el fichero <strong>~\/.ssh\/id_rsa_bitbucket<\/strong> (usamos la opci\u00f3n <tt>-f fichero_clave<\/tt>). Nos pedira un <tt>&lt;password&gt;<\/tt>, el cual introducimos dos veces y habr\u00e1 generado los ficheros <strong>id_rsa_bitbucket<\/strong> y <strong>id_rsa_bitbucket.pub<\/strong>. \u00c9stos tendr\u00e1n un aspecto similar a esto:<\/p>\n<pre><strong>id_rsa_bitbucket<\/strong>\r\n-----BEGIN OPENSSH PRIVATE KEY-----\r\nb3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDjVQNgBj\r\n...\r\nN3mBPX+icCZSO9RBVvAO39vYLTg=\r\n-----END OPENSSH PRIVATE KEY-----<\/pre>\n<pre><strong>id_rsa_bitbucket.pub<\/strong>\r\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHFIAvWdrhT9xbM+iwp+PL1fWhXrr8P+Lp...... PsdWU= usuario@domain<\/pre>\n<p>Luego nos queda a\u00f1adir estas claves al agente SSH local, ejecutamos el comando <strong>eval $(ssh-agent)<\/strong> y luego a\u00f1adirmos la clave con <strong>ssh-add ~\/.ssh\/id_rsa_bitbucket<\/strong>. Nos pedir\u00e1 la clave que hemos introducido en el paso del ssh-keygen.<\/p>\n<p>A\u00fan nos queda algo para que todo esto funcione.<\/p>\n<p>Paso 2,, crear una configuraci\u00f3n para cada Host SSH<\/p>\n<p>Para que nuestro cliente SSH sepa qu\u00e9 pareja de claves p\u00fablica y privada debe usar en cada conexi\u00f3n es necesario que se lo indiquemos, pues de otra forma siempre usar\u00e1 las por defecto, es decir, <strong>(id_rsa<\/strong> y <strong>id_rsa.pub<\/strong>).<\/p>\n<p>Creamos el fichero <strong>~\/.ssh\/config<\/strong> y a\u00f1adimos este contenido:<\/p>\n<pre>Host bitbucket.org\r\nAddKeysToAgent yes\r\nIdentityFile ~\/.ssh\/<strong>id_rsa_bitbucket<\/strong>\r\n\r\nHost *\r\nAddKeysToAgent yes\r\nIdentityFile ~\/.ssh\/id_rsa<\/pre>\n<p>Y con esto estar\u00eda, b\u00e1sicamente para toda conexi\u00f3n que vaya a un host bitbucket.org usar\u00eda las claves que acabamos de crear y para el resto las que ya exist\u00edan.<\/p>\n<h1>Verificaci\u00f3n<\/h1>\n<p>Podemos ver que esto funciona correctamente con la siguiente prueba:<\/p>\n<pre>$ <strong>ssh -T git@bitbucket.org<\/strong>\r\nauthenticated via ssh key.\r\nYou can use git to connect to Bitbucket. Shell access is disabled<\/pre>\n<h1>REFERENCIAS<\/h1>\n<ol>\n<li><a href=\"https:\/\/support.atlassian.com\/bitbucket-cloud\/docs\/set-up-an-ssh-key\/\">Set up an SSH key<\/a><\/li>\n<li><a href=\"https:\/\/www.ssh.com\/academy\/ssh\/config\">SSH config file for OpenSSH client<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n Normalmente uso git como herramienta de control de c\u00f3digo fuente. Por lo general el escenario que me he encontrado es una \u00fanica cuenta en mi equipo. Ya que en equipo personal hago mis pruebas con bitbucket y en el &hellip; <a href=\"https:\/\/blogs.ua.es\/jpm33\/2022\/04\/27\/configurar-ssh-para-usar-diferentes-pares-de-claves-con-bitbucket-y-otros-servicios-git\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3080,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6236,374,676],"tags":[6236,236729,236718,847],"class_list":["post-536","post","type-post","status-publish","format-standard","hentry","category-git","category-programacion","category-sin-categoria","tag-git","tag-linux","tag-programacion-2","tag-ssh"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/536","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/users\/3080"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/comments?post=536"}],"version-history":[{"count":3,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/536\/revisions"}],"predecessor-version":[{"id":595,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/536\/revisions\/595"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/media?parent=536"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/categories?post=536"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/tags?post=536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}