我有一个使用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 git@github.com: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 git@github.com:github-username/repo-name.git'
);
echo $connection->exec(implode('; ', $commands));
最后一个 工作。但它要求我在服务器上也有密钥,我宁愿阻止它。
当我手动执行此操作时,它可以正常工作。
$ ssh -A example-username@www.example.com
$ cd ~/example-path/
$ git clone git@github.com:github-username/repo-name.git
如果我跳过-A
,则克隆失败是转发使其工作的。
在脚本中,我已经验证了:
ssh-add -l
列出它); 但脚本可能没有使用转发。这是phpseclib的限制吗?我可以以使用转发的方式设置本地ssh代理吗?