Capistrano 无法部署到新的 Ubuntu 服务器,因为 SSHKit / Net::SSH 无法进行身份验证
Capistrano can't deploy to new Ubuntu server because SSHKit / Net::SSH can't authenticate
我正在尝试为我正在处理的应用程序的新版本设置一个 staging/testing 服务器。所以我已经设置好了,这样我的本地帐户就可以在部署服务器中进行身份验证而无需输入密码:
$ ssh tester@app-staging.acme.com
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-28-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 packages can be updated.
0 updates are security updates.
Last login: Thu Jul 7 15:53:38 2016 from 10.10.12.50
tester@app-staging:~$ logout
现在我尝试加入 Capistrano,但它直接拒绝了我:
$ cap staging deploy:check
$ cap staging deploy:check
(Backtrace restricted to imported tasks)
cap aborted!
Net::SSH::AuthenticationFailed: Authentication failed for user tester@app-staging.acme.com
Tasks: TOP => rbenv:validate
(See full trace by running task with --trace)
目前的调查:
- 最初我是用上次任何人部署应用程序时所需的所有 hack 来做这件事的,所以为了从等式中删除很多东西,我把所有文件都放在一边,让 Capistrano 生成新的部署配置。所以这就是目前最低限度配置的全部 运行,它仍然无法进行身份验证。
- 我最初假设默认情况下会使用 public 密钥身份验证,因为 Capistrano 文档说将使用用户的 SSH 配置文件。我现在知道这是 而不是 的情况,并且您必须明确地将
'publickey'
作为方法放入。所以在此之前,它要求输入密码。我希望让它不要求输入密码是我必须弄清楚的最难的事情,但显然不是。
- 我不完全确定 "keys" 设置是否必要,因为,如果 Capistrano 没有使用我的配置中的设置,它可能也不会获取密钥文件。所以我尝试手动输入文件的路径,但它并没有改变任何东西。
- 我曾经在密钥文件名的末尾有一个
.pub
,直到意识到它可能需要私钥。但是删除它之后,我得到了完全相同的结果。
- 感谢评论中的建议,我从服务器声明中删除了密码,因为我认为让 sudo 在没有密码的情况下工作无论如何是一个更干净的解决方案。但结果相同。
现在我有点不知道如何诊断这个了。
我不知道是否有任何 Capistrano 等同于 ssh -v
,以便获得有关它正在尝试做什么的更多信息。
显然我的 SSH 连接没有问题,但 Capistrano 没有使用正确的设置进行连接,所以可能是我的语法错误或同样明显的问题。为此,这是我目前拥有的文件:
Capfile
:
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/rbenv'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require 'capistrano/nginx'
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
config/deploy.rb
:
lock '3.5.0'
set :application, 'app'
set :scm, :svn
set :repo_url, 'https://svn.acme.com/app/trunk'
set :ssh_options, {
auth_methods: ['publickey'],
keys: ['~/.ssh/id_ed25519'],
}
config/deploy/staging.rb
:
set :rails_env, 'staging'
server 'all-staging.acme.com', user: 'tester', port: 22,
roles: %w{web app db}
set :deploy_to, '/var/www/app/staging'
将问题追入sshkit:
我注意到 capistrano 使用 sshkit 来完成实际的 SSH 工作,所以我为此编写了一个测试程序。
#!/usr/bin/env ruby
require 'sshkit'
require 'sshkit/dsl'
include SSHKit::DSL
SSHKit.config.output_verbosity = Logger::DEBUG
on 'tester@app-staging.acme.com' do
puts capture(:ls, '-l')
end
这表现出同样的问题,尽管据说默认使用相同的密钥,但它要求输入密码。虽然将详细程度设置为 DEBUG
并没有真正添加任何有用的诊断来工作。
追问题进入Net::SSH:
在为 sshkit 安装 gems 时,我注意到它正在使用另一个 SSH 库 net-ssh 来完成实际的 SSH 工作,所以我尝试制作一个新的测试程序来使用它。
$ cat test
#!/usr/bin/env ruby
require 'net/ssh'
Net::SSH.start('portal-staging.syd.nuix.com', 'tester', verbose: :debug) do |ssh|
output = ssh.exec!("ls -l")
puts output
end
这一次,调试输出很有用:
$ ./test
D, [2016-07-08T10:52:56.725877 #56100] DEBUG -- net.ssh.transport.session[3fe8c6916074]: establishing connection to app-staging.acme.com:22
D, [2016-07-08T10:52:56.727988 #56100] DEBUG -- net.ssh.transport.session[3fe8c6916074]: connection established
I, [2016-07-08T10:52:56.728056 #56100] INFO -- net.ssh.transport.server_version[3fe8c6913414]: negotiating protocol version
D, [2016-07-08T10:52:56.728080 #56100] DEBUG -- net.ssh.transport.server_version[3fe8c6913414]: local is `SSH-2.0-Ruby/Net::SSH_3.1.1 x86_64-darwin13.0'
D, [2016-07-08T10:52:56.749127 #56100] DEBUG -- net.ssh.transport.server_version[3fe8c6913414]: remote is `SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu1'
D, [2016-07-08T10:52:56.750086 #56100] DEBUG -- socket[3fe8c6913ae0]: read 976 bytes
D, [2016-07-08T10:52:56.750166 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 0 type 20 len 972
I, [2016-07-08T10:52:56.750219 #56100] INFO -- net.ssh.transport.algorithms[3fe8c690fddc]: got KEXINIT from server
I, [2016-07-08T10:52:56.750326 #56100] INFO -- net.ssh.transport.algorithms[3fe8c690fddc]: sending KEXINIT
D, [2016-07-08T10:52:56.750437 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 0 type 20 len 1684
D, [2016-07-08T10:52:56.750504 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 1688 bytes
I, [2016-07-08T10:52:56.750531 #56100] INFO -- net.ssh.transport.algorithms[3fe8c690fddc]: negotiating algorithms
D, [2016-07-08T10:52:56.750628 #56100] DEBUG -- net.ssh.transport.algorithms[3fe8c690fddc]: negotiated:
* kex: diffie-hellman-group14-sha1
* host_key: ecdsa-sha2-nistp256
* encryption_server: aes128-ctr
* encryption_client: aes128-ctr
* hmac_client: hmac-sha1
* hmac_server: hmac-sha1
* compression_client: none
* compression_server: none
* language_client:
* language_server:
D, [2016-07-08T10:52:56.750654 #56100] DEBUG -- net.ssh.transport.algorithms[3fe8c690fddc]: exchanging keys
D, [2016-07-08T10:52:56.752145 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 1 type 30 len 268
D, [2016-07-08T10:52:56.752209 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 272 bytes
D, [2016-07-08T10:52:56.753413 #56100] DEBUG -- socket[3fe8c6913ae0]: read 504 bytes
D, [2016-07-08T10:52:56.753475 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 1 type 31 len 484
D, [2016-07-08T10:52:56.754718 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 2 type 21 len 20
D, [2016-07-08T10:52:56.754785 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 24 bytes
D, [2016-07-08T10:52:56.754829 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 2 type 21 len 12
D, [2016-07-08T10:52:56.755084 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: beginning authentication of `tester'
D, [2016-07-08T10:52:56.755183 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 3 type 5 len 28
D, [2016-07-08T10:52:56.755222 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 52 bytes
D, [2016-07-08T10:52:56.793167 #56100] DEBUG -- socket[3fe8c6913ae0]: read 52 bytes
D, [2016-07-08T10:52:56.793356 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 3 type 6 len 28
D, [2016-07-08T10:52:56.793467 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: trying none
D, [2016-07-08T10:52:56.793589 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 4 type 50 len 44
D, [2016-07-08T10:52:56.793640 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 68 bytes
D, [2016-07-08T10:52:56.795136 #56100] DEBUG -- socket[3fe8c6913ae0]: read 68 bytes
D, [2016-07-08T10:52:56.795258 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 4 type 51 len 44
D, [2016-07-08T10:52:56.795319 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: allowed methods: publickey,password
D, [2016-07-08T10:52:56.795361 #56100] DEBUG -- net.ssh.authentication.methods.none[3fe8c68cb18c]: none failed
D, [2016-07-08T10:52:56.795404 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: trying publickey
E, [2016-07-08T10:52:56.795652 #56100] ERROR -- net.ssh.authentication.key_manager[3fe8c68cbad8]: could not load public key file `/Users/tester/.ssh/id_ed25519.pub': Net::SSH::Exception (public key at /Users/tester/.ssh/id_ed25519.pub is not valid)
D, [2016-07-08T10:52:56.795787 #56100] DEBUG -- net.ssh.authentication.agent[3fe8c68c2dfc]: connecting to ssh-agent
D, [2016-07-08T10:52:56.795868 #56100] DEBUG -- net.ssh.authentication.agent[3fe8c68c2dfc]: sending agent request 1 len 49
D, [2016-07-08T10:52:56.795972 #56100] DEBUG -- net.ssh.authentication.agent[3fe8c68c2dfc]: received agent packet 2 len 5
D, [2016-07-08T10:52:56.796016 #56100] DEBUG -- net.ssh.authentication.agent[3fe8c68c2dfc]: sending agent request 11 len 0
D, [2016-07-08T10:52:56.796136 #56100] DEBUG -- net.ssh.authentication.agent[3fe8c68c2dfc]: received agent packet 12 len 550
E, [2016-07-08T10:52:56.796241 #56100] ERROR -- net.ssh.authentication.agent[3fe8c68c2dfc]: ignoring unimplemented key:unsupported key type `ssh-ed25519' tester@bucket.local
D, [2016-07-08T10:52:56.796414 #56100] DEBUG -- net.ssh.authentication.methods.publickey[3fe8c68c3e64]: trying publickey (4b:98:3b:de:13:27:69:2e:75:84:58:0b:4b:43:70:2f)
D, [2016-07-08T10:52:56.796677 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 5 type 50 len 508
D, [2016-07-08T10:52:56.796729 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 532 bytes
D, [2016-07-08T10:52:56.797367 #56100] DEBUG -- socket[3fe8c6913ae0]: read 68 bytes
D, [2016-07-08T10:52:56.797440 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 5 type 51 len 44
D, [2016-07-08T10:52:56.797513 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: allowed methods: publickey,password
D, [2016-07-08T10:52:56.797546 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: trying password
[at this point I interrupt the process]
所以它似乎只尝试了我的一个密钥,认为它无效,并在几行之后记录它不受支持。我的 .ssh
目录中还有另一个密钥,似乎甚至没有人尝试过。
这不是问题所在吗?
E, [2016-07-08T10:52:56.795652 #56100] ERROR -- net.ssh.authentication.key_manager[3fe8c68cbad8]: could not load public key file `/Users/tester/.ssh/id_ed25519.pub': Net::SSH::Exception (public key at /Users/tester/.ssh/id_ed25519.pub is not valid)
net-ssh 似乎不喜欢您的 id_ed25519.pub
public 密钥的格式。
Net SSH 4.0.0alpha1-4 似乎支持 ed25519 密钥。
https://github.com/net-ssh/net-ssh/issues/214
您可能可以使用 RSA 密钥,升级到 net-ssh 4.0.0alpha4,或者可能使用 SSH 代理来解决这个问题。
我正在尝试为我正在处理的应用程序的新版本设置一个 staging/testing 服务器。所以我已经设置好了,这样我的本地帐户就可以在部署服务器中进行身份验证而无需输入密码:
$ ssh tester@app-staging.acme.com
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-28-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 packages can be updated.
0 updates are security updates.
Last login: Thu Jul 7 15:53:38 2016 from 10.10.12.50
tester@app-staging:~$ logout
现在我尝试加入 Capistrano,但它直接拒绝了我:
$ cap staging deploy:check
$ cap staging deploy:check
(Backtrace restricted to imported tasks)
cap aborted!
Net::SSH::AuthenticationFailed: Authentication failed for user tester@app-staging.acme.com
Tasks: TOP => rbenv:validate
(See full trace by running task with --trace)
目前的调查:
- 最初我是用上次任何人部署应用程序时所需的所有 hack 来做这件事的,所以为了从等式中删除很多东西,我把所有文件都放在一边,让 Capistrano 生成新的部署配置。所以这就是目前最低限度配置的全部 运行,它仍然无法进行身份验证。
- 我最初假设默认情况下会使用 public 密钥身份验证,因为 Capistrano 文档说将使用用户的 SSH 配置文件。我现在知道这是 而不是 的情况,并且您必须明确地将
'publickey'
作为方法放入。所以在此之前,它要求输入密码。我希望让它不要求输入密码是我必须弄清楚的最难的事情,但显然不是。 - 我不完全确定 "keys" 设置是否必要,因为,如果 Capistrano 没有使用我的配置中的设置,它可能也不会获取密钥文件。所以我尝试手动输入文件的路径,但它并没有改变任何东西。
- 我曾经在密钥文件名的末尾有一个
.pub
,直到意识到它可能需要私钥。但是删除它之后,我得到了完全相同的结果。 - 感谢评论中的建议,我从服务器声明中删除了密码,因为我认为让 sudo 在没有密码的情况下工作无论如何是一个更干净的解决方案。但结果相同。
现在我有点不知道如何诊断这个了。
我不知道是否有任何 Capistrano 等同于 ssh -v
,以便获得有关它正在尝试做什么的更多信息。
显然我的 SSH 连接没有问题,但 Capistrano 没有使用正确的设置进行连接,所以可能是我的语法错误或同样明显的问题。为此,这是我目前拥有的文件:
Capfile
:
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/rbenv'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require 'capistrano/nginx'
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
config/deploy.rb
:
lock '3.5.0'
set :application, 'app'
set :scm, :svn
set :repo_url, 'https://svn.acme.com/app/trunk'
set :ssh_options, {
auth_methods: ['publickey'],
keys: ['~/.ssh/id_ed25519'],
}
config/deploy/staging.rb
:
set :rails_env, 'staging'
server 'all-staging.acme.com', user: 'tester', port: 22,
roles: %w{web app db}
set :deploy_to, '/var/www/app/staging'
将问题追入sshkit:
我注意到 capistrano 使用 sshkit 来完成实际的 SSH 工作,所以我为此编写了一个测试程序。
#!/usr/bin/env ruby
require 'sshkit'
require 'sshkit/dsl'
include SSHKit::DSL
SSHKit.config.output_verbosity = Logger::DEBUG
on 'tester@app-staging.acme.com' do
puts capture(:ls, '-l')
end
这表现出同样的问题,尽管据说默认使用相同的密钥,但它要求输入密码。虽然将详细程度设置为 DEBUG
并没有真正添加任何有用的诊断来工作。
追问题进入Net::SSH:
在为 sshkit 安装 gems 时,我注意到它正在使用另一个 SSH 库 net-ssh 来完成实际的 SSH 工作,所以我尝试制作一个新的测试程序来使用它。
$ cat test
#!/usr/bin/env ruby
require 'net/ssh'
Net::SSH.start('portal-staging.syd.nuix.com', 'tester', verbose: :debug) do |ssh|
output = ssh.exec!("ls -l")
puts output
end
这一次,调试输出很有用:
$ ./test
D, [2016-07-08T10:52:56.725877 #56100] DEBUG -- net.ssh.transport.session[3fe8c6916074]: establishing connection to app-staging.acme.com:22
D, [2016-07-08T10:52:56.727988 #56100] DEBUG -- net.ssh.transport.session[3fe8c6916074]: connection established
I, [2016-07-08T10:52:56.728056 #56100] INFO -- net.ssh.transport.server_version[3fe8c6913414]: negotiating protocol version
D, [2016-07-08T10:52:56.728080 #56100] DEBUG -- net.ssh.transport.server_version[3fe8c6913414]: local is `SSH-2.0-Ruby/Net::SSH_3.1.1 x86_64-darwin13.0'
D, [2016-07-08T10:52:56.749127 #56100] DEBUG -- net.ssh.transport.server_version[3fe8c6913414]: remote is `SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu1'
D, [2016-07-08T10:52:56.750086 #56100] DEBUG -- socket[3fe8c6913ae0]: read 976 bytes
D, [2016-07-08T10:52:56.750166 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 0 type 20 len 972
I, [2016-07-08T10:52:56.750219 #56100] INFO -- net.ssh.transport.algorithms[3fe8c690fddc]: got KEXINIT from server
I, [2016-07-08T10:52:56.750326 #56100] INFO -- net.ssh.transport.algorithms[3fe8c690fddc]: sending KEXINIT
D, [2016-07-08T10:52:56.750437 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 0 type 20 len 1684
D, [2016-07-08T10:52:56.750504 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 1688 bytes
I, [2016-07-08T10:52:56.750531 #56100] INFO -- net.ssh.transport.algorithms[3fe8c690fddc]: negotiating algorithms
D, [2016-07-08T10:52:56.750628 #56100] DEBUG -- net.ssh.transport.algorithms[3fe8c690fddc]: negotiated:
* kex: diffie-hellman-group14-sha1
* host_key: ecdsa-sha2-nistp256
* encryption_server: aes128-ctr
* encryption_client: aes128-ctr
* hmac_client: hmac-sha1
* hmac_server: hmac-sha1
* compression_client: none
* compression_server: none
* language_client:
* language_server:
D, [2016-07-08T10:52:56.750654 #56100] DEBUG -- net.ssh.transport.algorithms[3fe8c690fddc]: exchanging keys
D, [2016-07-08T10:52:56.752145 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 1 type 30 len 268
D, [2016-07-08T10:52:56.752209 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 272 bytes
D, [2016-07-08T10:52:56.753413 #56100] DEBUG -- socket[3fe8c6913ae0]: read 504 bytes
D, [2016-07-08T10:52:56.753475 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 1 type 31 len 484
D, [2016-07-08T10:52:56.754718 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 2 type 21 len 20
D, [2016-07-08T10:52:56.754785 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 24 bytes
D, [2016-07-08T10:52:56.754829 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 2 type 21 len 12
D, [2016-07-08T10:52:56.755084 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: beginning authentication of `tester'
D, [2016-07-08T10:52:56.755183 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 3 type 5 len 28
D, [2016-07-08T10:52:56.755222 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 52 bytes
D, [2016-07-08T10:52:56.793167 #56100] DEBUG -- socket[3fe8c6913ae0]: read 52 bytes
D, [2016-07-08T10:52:56.793356 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 3 type 6 len 28
D, [2016-07-08T10:52:56.793467 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: trying none
D, [2016-07-08T10:52:56.793589 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 4 type 50 len 44
D, [2016-07-08T10:52:56.793640 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 68 bytes
D, [2016-07-08T10:52:56.795136 #56100] DEBUG -- socket[3fe8c6913ae0]: read 68 bytes
D, [2016-07-08T10:52:56.795258 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 4 type 51 len 44
D, [2016-07-08T10:52:56.795319 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: allowed methods: publickey,password
D, [2016-07-08T10:52:56.795361 #56100] DEBUG -- net.ssh.authentication.methods.none[3fe8c68cb18c]: none failed
D, [2016-07-08T10:52:56.795404 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: trying publickey
E, [2016-07-08T10:52:56.795652 #56100] ERROR -- net.ssh.authentication.key_manager[3fe8c68cbad8]: could not load public key file `/Users/tester/.ssh/id_ed25519.pub': Net::SSH::Exception (public key at /Users/tester/.ssh/id_ed25519.pub is not valid)
D, [2016-07-08T10:52:56.795787 #56100] DEBUG -- net.ssh.authentication.agent[3fe8c68c2dfc]: connecting to ssh-agent
D, [2016-07-08T10:52:56.795868 #56100] DEBUG -- net.ssh.authentication.agent[3fe8c68c2dfc]: sending agent request 1 len 49
D, [2016-07-08T10:52:56.795972 #56100] DEBUG -- net.ssh.authentication.agent[3fe8c68c2dfc]: received agent packet 2 len 5
D, [2016-07-08T10:52:56.796016 #56100] DEBUG -- net.ssh.authentication.agent[3fe8c68c2dfc]: sending agent request 11 len 0
D, [2016-07-08T10:52:56.796136 #56100] DEBUG -- net.ssh.authentication.agent[3fe8c68c2dfc]: received agent packet 12 len 550
E, [2016-07-08T10:52:56.796241 #56100] ERROR -- net.ssh.authentication.agent[3fe8c68c2dfc]: ignoring unimplemented key:unsupported key type `ssh-ed25519' tester@bucket.local
D, [2016-07-08T10:52:56.796414 #56100] DEBUG -- net.ssh.authentication.methods.publickey[3fe8c68c3e64]: trying publickey (4b:98:3b:de:13:27:69:2e:75:84:58:0b:4b:43:70:2f)
D, [2016-07-08T10:52:56.796677 #56100] DEBUG -- socket[3fe8c6913ae0]: queueing packet nr 5 type 50 len 508
D, [2016-07-08T10:52:56.796729 #56100] DEBUG -- socket[3fe8c6913ae0]: sent 532 bytes
D, [2016-07-08T10:52:56.797367 #56100] DEBUG -- socket[3fe8c6913ae0]: read 68 bytes
D, [2016-07-08T10:52:56.797440 #56100] DEBUG -- socket[3fe8c6913ae0]: received packet nr 5 type 51 len 44
D, [2016-07-08T10:52:56.797513 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: allowed methods: publickey,password
D, [2016-07-08T10:52:56.797546 #56100] DEBUG -- net.ssh.authentication.session[3fe8c68d21bc]: trying password
[at this point I interrupt the process]
所以它似乎只尝试了我的一个密钥,认为它无效,并在几行之后记录它不受支持。我的 .ssh
目录中还有另一个密钥,似乎甚至没有人尝试过。
这不是问题所在吗?
E, [2016-07-08T10:52:56.795652 #56100] ERROR -- net.ssh.authentication.key_manager[3fe8c68cbad8]: could not load public key file `/Users/tester/.ssh/id_ed25519.pub': Net::SSH::Exception (public key at /Users/tester/.ssh/id_ed25519.pub is not valid)
net-ssh 似乎不喜欢您的 id_ed25519.pub
public 密钥的格式。
Net SSH 4.0.0alpha1-4 似乎支持 ed25519 密钥。
https://github.com/net-ssh/net-ssh/issues/214
您可能可以使用 RSA 密钥,升级到 net-ssh 4.0.0alpha4,或者可能使用 SSH 代理来解决这个问题。