22

我对 Capistrano 和 Ruby 完全陌生,而且我似乎无法设置基本的部署。每次我运行 cap deploy:check 我都会收到以下错误:

服务器:["domain.com"] 连接失败:me@domain.com (Net::SSH::HostKeyMismatch: 指纹 0c:de:d4: 1b:e9:64:83:3a:8b:d7:c3: 42:98:5b:5d:8c 与 "[domain.com]:22,[62.39.11.2]:22" 不匹配)

我的 deploy.db 看起来像这样:

set :stages, %w(production staging)
set :default_stage, "staging"
require 'capistrano/ext/multistage'

set :application, "captest" # TODO
set :repository, "git@bitbucket.org:jy312/captest.git" # TODO
set :scm, :git
set :use_sudo, false

ssh_options[:forward_agent] = true
default_run_options[:pty] = true
set :deploy_via, :remote_cache
set :copy_exclude, [".git", ".DS_Store", ".gitignore", ".gitmodules"]
set :git_enable_submodules, 1

我尝试将我的本地计算机公钥(id_rsa.pub)添加到我的服务器上的 known_hosts 列表中,但没有成功。

任何建议将不胜感激。非常感谢您的帮助。

4

5 回答 5

46

known_hosts目标服务器的指纹与本地文件中的指纹不匹配。known_hosts删除本地文件中的现有条目。

您也可以尝试通过直接 SSH 连接到服务器而不是通过 ruby​​ 来解决问题,因为这是一个 SSH 问题。

于 2013-08-15T18:29:59.517 回答
10

或者只是重写它(更改您的服务器的用户名和 IP):

$ ssh-keygen -f "/home/USERNAME/.ssh/known_hosts" -R 178.X.X.X

然后进入服务器

$ ssh user@178.X.X.X

并回答yes

重试部署

祝你好运 ;)

于 2014-10-31T09:54:19.187 回答
5

场景:从源机器到目标机器的 SSH

如果上述情况抛出 Net::SSH::HostKeyMismatch ,则执行以下操作,

1) Login to source machine and sudo su <User>
2) ssh destination machine
3) in step2, HostKeyMismatch error will be displayed and also the known hosts location.

or

2) cd ~
3) cd .ssh
4) vim known_hosts
5) clear the content of the file and save and quit (using command - :wq)

这应该可以解决问题。

于 2015-04-29T10:31:22.327 回答
5

虽然不适合生产系统,但如果您在部署到本地开发环境时遇到此问题,您可以考虑告诉 Capistrano 忽略严格的主机密钥验证。

部署.rb

set :ssh_options, paranoid: false

https://github.com/net-ssh/net-ssh/blob/e90551a4672587e294b47f824a401550f55184cc/lib/net/ssh.rb#L160

于 2016-12-08T21:33:03.763 回答
0

部署.rb

set :ssh_options, {verify_host_key: :never}
于 2021-11-15T10:24:52.343 回答