У меня это работает на gitlab ci, и оно работает для обычного ssh (скопировано из документации gitlab ci):
eval $(ssh-agent -s)
ssh-add <(echo "$SSH_PRIVATE_KEY")
mkdir -p ~/.ssh
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
Это дает мне
Identity added: /dev/fd/63 (/dev/fd/63)
Однако когда я пытаюсь выполнить rsync, я получаю сообщение об ошибке:
Warning: Permanently added '*****' (ECDSA) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
user@server: Permission denied (publickey,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(235) [sender=3.1.3]
Почему rsync не может использовать добавленную идентификацию, когда есть команда ssh?
Я также могу сделать это вместо этого, чтобы обойти проблему с rsync.
eval $(ssh-agent -s)
mkdir -p ~/.ssh
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-add
Что дает мне
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
Какой rsync является можно использовать, скорее всего, потому, что находится в предполагаемом месте.
Означает ли это, что rsync использует собственную реализацию ssh, а не ssh-agent в локальной системе?
Вы можете указать протокол ssh с помощью rsync, используя параметр "-e".
rsync -e ssh file.tmp example.com:~/
В этом варианте также может быть указана личность.
rsync -e "ssh -i ~/.ssh/id_rsa" file.tmp exmple.com:~/