问题描述
我有一个Capistrano和cap production deploy
一起使用的Rails应用
这很好,但是如果我重新启动计算机,则会出现以下错误:
01 [email protected]:权限被拒绝(公钥)。 01致命:无法从远程存储库读取。 01 01请确保您具有正确的访问权限 01并且存储库存在。
要解决此问题,我需要运行以下两个命令:
ssh-add
和
ssh -A deploy@{{IP here}} 'git ls-remote [email protected]:{{repo URL here}}'
这使我可以部署。
这里显然不对劲,没有存储关键细节。
有人可以帮我理解第二个命令的实际作用,以及为什么重启后我必须重新运行它们吗?
解决方法
第二个命令将您的私钥从本地计算机“转发”到远程计算机(使用-A)。这会将您的私钥临时放置在远程服务器上。然后,远程机器将使用该私钥对GitHub进行身份验证。
第一个命令设置要转发到远程服务器的私钥。
有关如何使用ssh密钥转发的更多信息,请参见https://dev.to/levivm/how-to-use-ssh-and-ssh-agent-forwarding-more-secure-ssh-2c32。
如果远程服务器的IP地址始终相同,则可以将ssh配置为始终将密钥转发到该IP,并且不需要命令的-A部分。
将命令包装在可以运行的bash脚本中可能对您很有用,它将为您完成这两个命令。
安全警告
您的“私有” ssh密钥永远不应该共享。 ssh密钥转发(您现在要执行的操作)是暂时的,并将您的私钥短暂地放在远程服务器上-这可能是一种足够安全的方法。但是,请勿尝试将其永久复制到远程服务器。