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_rsaid_rsa.ppkこれは PuTTY バージョンのキー ファイルを使用しているため)。

Net::SSH::KeyManagerただし、キーを使用するのは両方プライベート ファイルとパブリック ファイルはディレクトリ内にあります。残念ながら、これは、秘密キーのない公開キー (または公開キーのない秘密キー) が見つかった場合、キーを破棄するのではなく、すぐに例外をスローすることを意味します。

PuTTYgenを使用してファイルから秘密鍵を.ppk標準のOpenSSHファイルにエクスポートした後(その後、そのファイルをこの答え)、パスワード認証を使用して接続することができました(それなし別の回答に示されているように、ssh/config ファイルが必要です。


注: これは OpenSSH gem のバグだと思います。無効なキーが 1 つあるからといって、別のキーやパスワードを使用できなくなるわけではありません。

関連情報