使用带密钥的ssh进行部署而不提供私钥的密码(ssh-agent)

时间:2014-04-18 20:33:42

标签: php symfony ssh laravel ssh-agent

Capistrano和Rocketeer在私钥密码中的区别在哪里?

我已经正确设置了Capistrano和Rocketeer部署策略并且正常工作。 Capistrano让 ssh-agent提供密码 - Rocketeer,因为它似乎没有。问题不在于如何,而是为什么需要密码短语。

背景:

我想使用Rocketeer来部署Laravel应用程序而不是Capistrano。好像它将SSH连接委托给Laravel。

在配置中仅设置远程服务器的名称并运行检查后,在提示输入凭据后,Rocketeer会将所需的密码短语和路径存储到非版本控制文件中的所需私钥。

我不想拥有用于建立存储在我的磁盘上的SSH连接的凭据 - 尤其是密码到我的任何私钥。

那么,为什么还需要服务器的名称呢?

我看到Laravel在其遥控器配置中准备了这些字段 - 我无法找出最终负责哪个组件以及为什么它不会将SSH连接完全留给系统本身。

Rocketeer Laravel Symfony phpseclib 甚至 php 本身下面需要很多信息来建立SSH连接?

2 个答案:

答案 0 :(得分:3)

这是Laravel缺少phpseclib ssh-agent的实现,需要很多信息才能建立SSH连接。

这就是为什么Rocketeer不允许像Capistrano一样依赖用户名/密码和私钥/密码认证旁边的ssh-agent。

提案statedmerged包含phpseclib的undocumented implementation for using the ssh-agent而不是明确的密钥。

Rocketeer将从中获益,因为它依赖于在Laravel中实施的phpseclib。

(感谢@hannesvdvreken,@ TomasPayer和@passioncoder指向正确的方向)

答案 1 :(得分:2)

有些事情你可能想知道。

您可以使用默认app/config/remote.php,也可以使用在config.php下发布的Rocketeer app/packages/anahkiasen/rocketeer

我倾向于使用Laravel文件。我将该文件的副本复制到app/config/development文件夹中,该文件夹被git忽略.gitignore。我只在该文件中记下私钥的密码。它将与app/config/remote.php中的数组合并。

这是我的app/config/development/remote.php文件:

return array(
    'connections' => array(
        'staging' => array(
            'keyphrase' => 'your-secret-here',
        ),
        'production' => array(
            'keyphrase' => 'your-secret-here',
        ),
    ),
);

希望这有帮助。