强制 Capistrano 要求输入密码

强制 Capistrano 要求输入密码

我正在使用 Capistrano 部署到新服务器,并遇到以下问题。目前,我无法将 SSH 密钥添加到服务器以用于登录,因此我必须使用密码验证。但是,我的本地用户帐户.ssh目录中保存了另一台服务器的密钥。

这是我尝试登录时收到的错误:

C:\Web\WebApp1>cap deploy:setup
  * executing `deploy:setup'
  * executing "mkdir -p /home2/webapp1 /home2/webapp1/releases /home2/webapp1/shared /home2/webapp1/shared/system /home2/webapp1/shared/log /home2/webapp1/shared/pids"
    servers: ["myserver.example.com"]

connection failed for: myserver.example.com (OpenSSL::PKey::PKeyError: not a public key "C:/Users/MyAccount/.ssh/id_rsa.pub")

我怎样才能让 Capistrano 忽略我拥有的密钥,并让我使用密码登录?我尝试添加,set :password, "myp@ssw0rd"deploy.rb没有帮助。


更新

我按照@sysadmin1138 的回答将以下内容添加到 ssh 配置文件中:

HostName myserver.example.com
    PreferredAuthentications=password
    PubkeyAuthentication=no

现在,我收到错误:

connection failed for: myserver.example.com (Net::SSH::AuthenticationFailed: webappuser)

它甚至不要求输入密码。当我尝试在配置文件中指定密码时,它仍然给出相同的错误。


以下是我的 Capistrano 配置的相关部分:

role :web, "myserver.example.com"

set :user, "webappuser"
default_run_options[:pty] = true # Allow Capistrano to prompt for passwords

set :deploy_to, "/home2/webapp1"

答案1

这个问题可能在 Capistrano 之外和 SSH 本身中都可以解决。设置 ~/.ssh/config 文件并为您的主机创建一个条目:

HostName myserver.example.com
    PreferredAuthentications=keyboard-interactive
    PubkeyAuthentication=no

如果没有密钥,Capistrano 肯定会提示输入密码,我已经这样做了。

答案2

在阅读了 的代码之后Net::SSH::KeyManager,我发现了问题所在。

在这台机器上,我有一个名为id_rsa.pub 没有相应的私钥id_rsa(因为我使用的id_rsa.ppk是PuTTY版本的密钥文件)。

Net::SSH::KeyManager但是,只有在以下情况下才会使用密钥:两个都私有文件和公共文件都在目录中。不幸的是,这也意味着如果它发现没有私钥的公钥(或没有公钥的私钥),它会立即抛出异常,而不是直接丢弃密钥。

在我使用 PuTTYgen 将文件中的私钥导出.ppk到标准 OpenSSH 文件中之后(然后根据以下内容修改了该文件),这个答案),我能够使用密码验证进行连接(没有需要 ssh/config 文件,如另一个答案所示)。


注意:我认为这是 OpenSSH gem 中的一个错误。有一个无效密钥不应阻止您使用其他密钥或密码。

相关内容