• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

217
Vistas
¿Cómo cambiar entre claves SSH con la gema ruby-git?

¿Hay alguna manera de configurar diferentes claves SSH para la configuración de gemas ruby-git sobre la marcha, para que pueda trabajar con diferentes repositorios privados?

Lo que he hecho funciona bien, pero funciona solo con una clave SSH.

/ruby_git.sh en la carpeta raíz de mi aplicación Rails:

 #!/bin/bash exec /usr/bin/ssh -o StrictHostKeyChecking=no -i ./certs/private_key "$@"

/certs/private_key con mi clave SSH:

 -----BEGIN OPENSSH PRIVATE KEY----- ... -----END OPENSSH PRIVATE KEY-----

He creado /initializers/git_init.rb :

 Git.configure do |config| config.git_ssh = Rails.root.join("ruby_git.sh").to_s end

También probé otro enfoque, para crear scripts sh personalizados y archivos de clave privada SSH para cada repositorio en tiempo de ejecución y eliminarlos después de su uso. Pero esto parece alterar Git globalmente, por lo que el siguiente subproceso/sesión hereda la nueva configuración de Git :

 # @repo_id, @ssh_url and @private_key are instance variables set # based on the repo that we try to interact with cert_path = Rails.root.join("git_config", "certs", @repo_id).to_s config_path = Rails.root.join("git_config", "configs", "#{@repo_id}.sh").to_s git_config = "#!\/bin\/bash\n\nexec \/usr\/bin\/ssh -o StrictHostKeyChecking=no -i #{cert_path} \"$@\"" File.open(config_path, "w") { |f| f.write(git_config) } File.open(cert_path, "w") { |f| f.write(@private_key) } File.chmod(0755, config_path) File.chmod(0600, cert_path) Git.init Git.configure { |config| config.git_ssh = config_path } Git.ls_remote(@ssh_url) FileUtils.remove_entry(cert_path) FileUtils.remove_entry(config_path)

Traté de trabajar con ~/.ssh/config . Lo siguiente está funcionando, pero no satisface mis necesidades.

 Host github.com PreferredAuthentications publickey IdentityFile /home/ubuntu/.ssh/repo_1_private_key

Estoy trabajando con varios repositorios. Par SSH creado para cada uno de ellos. Parte pública utilizada como clave de implementación. Sin usuarios

Necesito medir un par de repositorios/claves de otro y no dejar que ssh tenga acceso a otras claves o iterar a través de ellas.

algo como

 Host github.com/organization_1/repo_1 PreferredAuthentications publickey IdentityFile /home/ubuntu/.ssh/repo_1_private_key Host github.com/organization_2/repo_2 PreferredAuthentications publickey IdentityFile /home/ubuntu/.ssh/repo_2_private_key

no funciona porque github.com/organization/repo no coincide con el host de github.com y la configuración se omite cuando se intenta git clone git@github.com:organization/repo.git .

about 3 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

¿Ha intentado colocar el archivo de configuración ssh y especificar a qué host conectarse?

No he tratado con scripts de Ruby. He tratado con ssh lo suficiente como para lidiar con tales cosas. Hay un archivo de configuración ssh que me ayuda en tales casos de uso. Es el ~/.ssh/config

En su caso de uso, ¿puede intentar tener alguna configuración como la siguiente línea?

 Host myfriendlyhostname1 HostName git.example.com User user1 Port 1234 IdentityFile ~/.ssh/id_rsa1 Host myfriendlyhostname2 HostName git.example.com User user2 Port 1234 IdentityFile ~/.ssh/id_rsa2

Lo que esto hace es que si coloca lo anterior dentro de su archivo ~/.ssh/config , esto asigna el nombre de la configuración para seleccionar la conexión.

En su caso, supongo que tiene las mismas credenciales de host diferentes, ¿verdad?

Si usa ssh myfriendlyhostname1 , se conectará usando la identidad provista para user1 a git.example.com .

Si usa ssh myfriendlyhostname2 , se conectará usando la identidad provista para user2 a git.example.com .

Cuando busqué, encontré este enlace que tiene más ejemplos, https://linuxize.com/post/using-the-ssh-config-file/

Lo que no he probado es git clone usando myfriendlyhostname1 . Si lo intentaste, avísame cómo te fue.

about 3 years ago · Santiago Trujillo Denunciar

0

Puede decir, sin embargo, Ruby se configura para decir, git -c core.sshcommand='/usr/bin/ssh -F my.temp.config' y configurar sus parámetros de configuración de conexión de una sola vez en esa configuración temporal.

about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda