У меня есть скрипт, который использует агент 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
перечисляет это);Но сценарий, вероятно, не использует пересылку. Это ограничение phpseclib? Можно ли настроить локальный агент ssh таким образом, чтобы он использовал переадресацию?
Задача ещё не решена.
Других решений пока нет …