ruby – Capistrano错误:无法连接到ssh-agent
我正在使用带有Capistrano部署的Bedrock.
当我使用命令包exec cap staging deploy时:检查我收到了身份验证错误: ... D,[2015-05-09T15:39:53.878464 #15636] DEBUG -- net.ssh.authentication.session[1e34a58]: trying publickey D,[2015-05-09T15:39:53.878464 #15636] DEBUG -- net.ssh.authentication.agent[1e30d2c]: connecting to ssh-agent E,[2015-05-09T15:39:53.879447 #15636] ERROR -- net.ssh.authentication.agent[1e30d2c]: could not connect to ssh-agent E,[2015-05-09T15:39:53.879447 #15636] ERROR -- net.ssh.authentication.session[1e34a58]: all authorization methods failed (tried publickey) cap aborted! SSHKit::Runner::ExecuteError: Exception while executing as deploy@SERVER_IP: Authentication failed for user deploy@SERVER_IP Tasks: TOP => git:check => git:wrapper Capistrano无法连接到我的服务器上的ssh-agent. 但是我可以通过SSH登录我的服务器,就像没有密码的ssh deploy @ SERVER_IP一样.我在Capistrano Authentication & Authorisation Docs page中删除了所有指令,因此我可以使用像@ localhost $ssh deploy@one-of-my-servers.com’主机名这样的命令;正常运行时间”. SSH_AUTH_SOCK=/tmp/ssh-UweQkw7578/agent.7578 这是我的deploy.rb文件: set :application,'dyxovka-special' set :repo_url,'git@github.com:tanzoor/dyxovka-wp-theme.git' set :branch,:master set :tmp_dir,'~/tmp' set :log_level,:info set :linked_files,fetch(:linked_files,[]).push('.env') set :linked_dirs,fetch(:linked_dirs,[]).push('web/app/uploads') 这是我的staging.rb文件: set :stage,:staging set :deploy_to,-> { "/var/www/vhosts/project/dev" } server 'SERVER_IP',user: 'deploy',roles: %w{web app} set :ssh_options,{ user: 'deploy',keys: %w('/c/Users/alexander/.ssh/id_rsa'),forward_agent: true,auth_methods: %w(publickey),verbose: :debug } fetch(:default_env).merge!(wp_env: :staging) 在sshd_config文件中启用了Apache的代理转发代理指令:AllowAgentForwarding yes 我的配置文件应该如何使我的部署工作? Windows 8.1 解决方法
好的,所以我遇到了同样的问题,我花了很长时间才弄清楚到底发生了什么,结果是 –
>对于Windows上的ruby,你必须运行pagent而不是ssh-agent,以便Capistrano和代理转发工作 – 实际上几乎任何在Windows上使用Ruby net-ssh库的工具. 而且我认为这不会改变,至少暂时不会改变. 代理转发 有关代理转发的更多信息,请参阅An Illustrated Guide to SSH Agent Forwarding,以及关键挑战如何在我们的工作站上进行备份. 术语 >工作站 – 我们的SSH机器(Windowa服务器/台式机/笔记本电脑) 建立 我有一个带有Git-Bash的Windows 7工作站盒,以及它的OpenSSH ssh客户端,以及来自Joe Reagle的脚本,它设置了一些环境变量,说明ssh-agent正在运行哪个端口和pid. 我也有Putty和Pageant,但最初我只专注于OpenSSH / Git-Bash工具. 我已经设置了从工作站到部署节点的无密码ssh,我运行了ssh-agent,我通过ssh-add添加了我的密钥,并且我将我的公钥注册为git repo的只读访问密钥. 基本 所以我们尝试使用SSH代理转发让Capistrano从我们的Git repo拉到我们的部署节点上. 现在我们可以通过在部署节点上设置公共SSH密钥并使用OpenSSH ssh客户端来确认我们有无密码ssh工作来测试这一切.然后我们可以设置ssh-agent >启动ssh-agent并根据需要设置SSH_AUTH_SOCK和SSH_AGENT_PID. 如果一切都设置正确,这一切都会有效,所以我们会认为“好吧我可以做’帽子部署:检查’” – 它会失败. 什么地方出了错 我们会收到错误 “从身份验证套接字读取响应长度出错” 谁告诉我们这个?它不是立即清楚,但它 >不是git repo 它是工作站上的Ruby ssh客户端库. 我们怎么知道呢 在deploy.rb文件的ssh_options哈希中,我们添加以下内容: 当我们这样做时,我们会看到此消息 >选美没有跑. 为什么Capistrano尝试使用Pageant而不是ssh-agent 当通过Capistrano运行时,ssh客户端与您手动验证时使用的客户端不同. 在手动验证时,它是一个OpenSSH ssh客户端.现在它是Ruby中的net-ssh库. 在Windows上,net-ssh有这些行 if Net::SSH::Authentication::PLATFORM == :win32 require 'net/ssh/authentication/pageant' end 要么 case Net::SSH::Authentication::PLATFORM when :java_win32 require 'net/ssh/authentication/agent/java_pageant' else require 'net/ssh/authentication/agent/socket' 所以加载选美会被硬编码到net-ssh中.它甚至没有尝试查看你是否在类似unix的shell(如git-bash或cygwin)下运行,然后使用unix-domain ssh-agent SSH_AUTH_SOCK 目前net-ssh并没有尝试打开一个名为socket的unix域.从理论上讲,我认为它可以通过stdlib中的UNIXSocket类实现.但我还没有在Windows机器上进行过实验. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |