Автоматизированный клон git на удаленном сервере через ssh с переадресацией агента

У меня есть скрипт, который использует агент SSH для входа на удаленный сервер. Это чем пытается клонировать частный репозиторий git. Однако я не могу заставить github принять логин.

<?php
$ssh_agent = new \phpseclib\System\SSH\Agent();
$connection = new \phpseclib\Net\SSH2('www.example.com');
$connection->login('example-username', $ssh_agent);

// the clone fails
$commands = array(
'cd ~/example-path/',
'ls -la',
'git clone [email protected]:github-username/repo-name.git'
);
echo $connection->exec(implode('; ', $commands));

// this *does* work
$commands = array(
'eval $(ssh-agent)',
'ssh-add ~/.ssh/local-key-copied-on-the-server',
'cd ~/example-path/',
'ls -la',
'git clone [email protected]:github-username/repo-name.git'
);
echo $connection->exec(implode('; ', $commands));

Последний делает Работа. Но это также требует от меня наличия ключа на сервере, что я бы предпочел предотвратить.

Когда я делаю это вручную, это работает.

$ ssh -A [email protected]
$ cd ~/example-path/
$ git clone [email protected]:github-username/repo-name.git

Именно переадресация делает эту работу, если я пропущу -AКлон терпит неудачу.

В сценарии я проверил, что:

  • агент (используемый сценарием) держит ключ (ssh-add -l перечисляет это);
  • github принимает клонирование определенного репозитория с помощью ключа развертывания (который я использую);
  • Я не вхожу в систему с другим ключом, то есть я временно удалил свой обычный личный ключ из своей учетной записи на github;

Но сценарий, вероятно, не использует пересылку. Это ограничение phpseclib? Можно ли настроить локальный агент ssh таким образом, чтобы он использовал переадресацию?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]