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
それを一覧表示します)。 - github は、デプロイ キー (私が使用しているキー) を介して特定のリポジトリのクローンを作成することを受け入れます。
- 別のキーでログインしていません。つまり、通常の個人用キーを github アカウントから一時的に削除しました。
しかし、スクリプトはおそらく転送を使用していません。それはphpseclibの制限ですか?転送を使用するようにローカル ssh エージェントをセットアップできますか?