Я использую Ubuntu 20.04 и запускаю скрипт bash, который хочу сделать переносимым на другие мои серверы, но я не могу одновременно заменить файл идентификации и имя пользователя ssh переменными, не получив при этом ошибку открытого ключа.
Сначала я проверял shellcheck.net
правильность своего базового синтаксиса
#!/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
Когда я добавляю -vvv
флаг к команде, она проверяет, что серверу предлагается правильный файл-ключ SSH:
...
...
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).
СТРАННОСТЬ:
Когда я заменяю указанную выше команду на эту, которая явно определяет имя пользователя, то та же самая переменная keyfile работает отлично.
ssh -p22 -i $connecting_keyfile username@$source_ssh_host
Проблема:
Похоже, что когда я заменяю ssh_username на переменную, ssh-agent, управляющий моей парольной фразой, каким-то образом теряет возможность отправлять учетные данные парольной фразы.
Для управления парольной фразой в моем .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
и это в моем~/.ssh/config
Host *
AddKeysToAgent yes
User username
Port 22
IdentityFile /home/username/.ssh/id_my_rsa