Estoy en Ubuntu 20.04 y estoy ejecutando un script bash que quiero que sea portátil para mis otros servidores, pero no puedo reemplazar el archivo de identidad Y el ssh_username con variables, al mismo tiempo, sin recibir un error de clave pública.
Primero solía shellcheck.net
verificar que mi sintaxis básica fuera correcta.
#!/bin/bash
source_ssh_user="admin"
source_ssh_host="123.456.789.12"
connecting_keyfile="/home/username/.ssh/id_my_rsa"
#this does NOT work, but it should:
ssh -i $connecting_keyfile $source_ssh_user@$source_ssh_host
cuando agrego la -vvv
bandera al comando, verifica que se esté ofreciendo al servidor el archivo de claves ssh correcto:
...
...
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/username/.ssh/id_my_rsa RSA SHA256:UXXXXXXXXUx/w1dY explicit agent
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug1: Offering public key: /home/username/.ssh/id_my_rsa RSA SHA256:UGKOXXXXXXXXXx/w1dY explicit
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
[email protected]: Permission denied (publickey).
EXTRAÑEZA:
Cuando reemplazo el comando anterior con este, que define explícitamente el nombre de usuario, entonces exactamente la misma variable de archivo de claves funciona perfectamente
ssh -p22 -i $connecting_keyfile username@$source_ssh_host
Problema:
Parece que cuando reemplazo ssh_username con una variable, el agente ssh que administra mi frase de contraseña de alguna manera pierde la capacidad de enviar la credencial de la frase de contraseña.
Para administrar mi frase de contraseña, tengo esto en mi .bashrc:
#Add passphrase to ssh-agent
SSH_ENV="$HOME/.ssh/agent-environment"
function start_agent {
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn't work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
y esto en mi~/.ssh/config
Host *
AddKeysToAgent yes
User username
Port 22
IdentityFile /home/username/.ssh/id_my_rsa