我过去已经为其他项目做过几次这样的事情并最终让它发挥作用,但每次我似乎都不记得该做什么。
我有一台ec2 ubuntu服务器,正在使用capistrano进行部署,并使用橡胶来设置evertyhing。
在我的ec2服务器上,我已经生成了ssh密钥,添加到bitbucket(在我的帐户下,ssh密钥。起初我在项目和部署密钥下尝试过,但这也没有用)。在我的ec2服务器上,我可以成功地手动ssh并将我的repo克隆到我的家中。我已经将密钥添加到ssh代理。
如果我不使用scm并将deploy_via设置为:copy,我可以部署得很好。我相信这会抓住我的本地项目并部署它。
我读过这些:https://confluence.atlassian.com/display/BITBUCKET/Using+Deployment+Keys https://confluence.atlassian.com/display/BITBUCKET/Troubleshooting+SSH+Issues https://confluence.atlassian.com/pages/viewpage.action?pageId=270827678
这很好用:
ubuntu@production:~$ ssh -T hg@bitbucket.org
conq: logged in as myBitBucketUser.
You can use git or hg to connect to Bitbucket. Shell access is disabled.
以下是我在部署期间收到的错误消息:
* executing "if [ -d /mnt/myProject-production/shared/cached-copy ]; then cd /mnt/myProject-production/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard f2b5b8b6cd1c7835d020d66fdc09b42b2870561e && git clean -q -d -x -f; else git clone -q git@bitbucket.org:myRepo.git /mnt/myProject-production/shared/cached-copy && cd /mnt/myProject-production/shared/cached-copy && git checkout -q -b deploy f2b5b8b6cd1c7835d020d66fdc09b42b2870561e; fi"
servers: ["production.myserver.com"]
[production.myserver.com] executing command
** [production.myserver.com :: out] Permission denied (publickey).
** fatal: The remote end hung up unexpectedly
这是我的deploy.rb:
set :rails_env, Rubber.env
on :load do
set :application, rubber_env.app_name
set :runner, rubber_env.app_user
set :deploy_to, "/mnt/#{application}-#{Rubber.env}"
set :copy_exclude, [".git/*", ".bundle/*", "log/*", ".rvmrc"]
end
# Use a simple directory tree copy here to make demo easier.
# You probably want to use your own repository for a real app
#set :scm, :none
#set :repository, "."
#set :deploy_via, :copy
ssh_options[:forward_agent] = true # also tried false
set :repository, "git@bitbucket.org:myProject.git"
set :scm, "git"
set :deploy_via, :remote_cache
set :branch, 'master'
# Easier to do system level config as root - probably should do it through
# sudo in the future. We use ssh keys for access, so no passwd needed
set :user, 'root'
set :password, nil
# Use sudo with user rails for cap deploy:[stop|start|restart]
# This way exposed services (mongrel) aren't running as a privileged user
set :use_sudo, false # also tried true
答案 0 :(得分:1)
我使用在本地计算机中生成的ssh密钥用于服务器和bitbucket repo,并使用capistrano进行部署。因此,使用它可以解决您的问题。
我做的方式
我使用本地机器的公钥(id_rsa.pub)
<强> deploy.rb 强>
ssh_options[:forward_agent] = true
当部署服务器尝试连接到您的git服务器时,它会从本地计算机转发身份验证。
您尝试方式的可能解决方案
与ssh git@github.com不同,ssh git @ bitbucket不会将自身添加到已知主机列表中。 所以在bitbucket中的方法必须是https://confluence.atlassian.com/display/BITBUCKET/Using+the+SSH+protocol+with+Bitbucket
答案 1 :(得分:0)
我也使用橡胶遇到了这个问题。
如果您有多个实例,则需要为所有实例获取SSH密钥,因为橡胶会将代码部署到所有实例。没有办法阻止这种情况。
要使用的ssh密钥位于〜/ .ssh或/root/.ssh下,如果您生成的密钥位于不同的目录中,或者位于不同的用户下,则可能无法使用用户的root将其识别为橡胶部署'那是用户从回购中提取的。
希望这有帮助。