本地计算机用户名:Christopher
Ubuntu服务器用户名:my_app_name
我已经按照Digital Ocean文档设置了一个带Ruby on Rails的Ubuntu 16.04服务器,这是我第一次这样做,但是当我到达cap production deploy:initial
时,控制台返回Net::SSH::AuthenticationFailed: Authentication failed for user Christopher@12.23.34.45
即使我能够在没有问题的情况下ssh到我的root和用户帐户。
我按照这些说明操作:
如何将Droplet与Digital Ocean连接 https://www.digitalocean.com/community/tutorials/how-to-connect-to-your-droplet-with-ssh
使用Ubuntu 16.04进行初始服务器设置
https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04
我使用以下方法在本地计算机上生成了一个ssh公钥/私钥对
ssh-keygen -t rsa
我将公钥从本地计算机添加到服务器~/.ssh/authorized_keys
文件中。然后我就可以ssh到我的root和用户帐户。
然后我按照这些说明操作:
使用Capistrano,Nginx和Puma在Ubuntu 14.04上部署Rails应用程序 https://www.digitalocean.com/community/tutorials/deploying-a-rails-app-on-ubuntu-14-04-with-capistrano-nginx-and-puma
我生成了另一个ssh密钥,这次是在服务器上,并将公钥添加到我的github的部署密钥列表中。然后我能够通过ssh成功克隆我的回购。
我运行以下命令:
cat ~/.ssh/id_rsa.pub | ssh -p your_port_num deploy@your_server_ip 'cat >> ~/.ssh/authorized_keys'
cap production deploy:initial
然后回来:
Net::SSH::AuthenticationFailed: Authentication failed for user Christopher@12.23.34.45
我真的很感激任何帮助,因为这是我第一次部署到Ubuntu服务器,我真的想知道我做错了什么。提前谢谢。
答案 0 :(得分:22)
您是否已将密钥添加到代理?
你跑步时看到了什么:
$ ssh-add -l
如果您收到'代理没有身份',请将密钥添加到:
$ ssh-add id_rsa_key_name
答案 1 :(得分:4)
首先,您需要ssh到您的服务器并运行
eval `ssh-agent`
然后
ssh-add ~/.ssh/id_rsa
现在改变
set :ssh_options, { forward_agent: true, user: fetch(:user), keys: %w(~/.ssh/id_rsa.pub) }
#
到
set :ssh_options, { forward_agent: true, user: fetch(:user), keys: %w(~/.ssh/id_rsa) }
#
我刚刚从pub
删除了id_rsa.pub
。
然后运行
cap production deploy:initial
现在应该可以了。相同的更改修复了我的应用https://www.wiki11.com的问题。
答案 2 :(得分:3)
你有:
set :ssh_options, { forward_agent: true, user: fetch(:user), keys: %w(~/.ssh/id_rsa.pub) }
将其更改为:
set :ssh_options, { forward_agent: true, user: fetch(:user), keys: %w(~/.ssh/id_rsa) }
密钥只应具有私钥位置。另外,使用ssh-add
在本地计算机上启用ssh-agent。在ForwardAgent yes
中为您的主持人添加~/.ssh/config
。
答案 3 :(得分:0)