1

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 エージェントをセットアップできますか?

4

0 に答える 0