2016-07-07 11 views
1

私が作業しているアプリケーションの新しいバージョンのステージング/テストサーバーを設定しようとしています。私のローカルアカウントにパスワードを入力しなくても、展開サーバーに認証できるようにだから私はそれを設定している:SSHKit/Net :: SSHが認証できないため、Capistranoは新しいUbuntuサーバーに展開できません

$ ssh [email protected] 
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 
[email protected]:~$ logout 

今、私はカピストラーノで取得しようが、それだけですぐに私を拒否:

$ cap staging deploy:check 

$ cap staging deploy:check 
(Backtrace restricted to imported tasks) 
cap aborted! 
Net::SSH::AuthenticationFailed: Authentication failed for user [email protected] 

Tasks: TOP => rbenv:validate 
(See full trace by running task with --trace) 

これまでの調査:

  • は当初、私はすべてのハックでこれをやっていたが、誰もがそう方程式から多くのものを削除するには、アプリケーションを展開し、最後の時間を要し、私が移動しましたすべての私のファイルを脇に置いて、Capistranoに新しい展開設定を生成させました。したがって、これは今のところ最小限の設定で実行されており、それでも認証できません。
  • 私はもともと公開鍵認証がデフォルトで使用されていると仮定していました。なぜなら、CapistranoのドキュメントはユーザーのSSH設定ファイルが使用されると言っているからです。私は今これがではなく、であることを知っており、方法として明示的に'publickey'を入力する必要があります。それ以前は、パスワードを尋ねていました。私は、パスワードを要求しないようにすることが、私が把握しなければならなかった最も難しいことだったが、明らかにそうではないことを望んでいた。
  • Capistranoが自分の設定からの設定を使用していない場合でも、キーファイルを取得していない可能性があるため、「キー」設定が必要かどうかは完全にはわかりません。だから私は手作業でファイルへのパスを入れてみましたが、とにかく変更されません。
  • 鍵ファイル名の末尾に.pubを置いていましたが、おそらく秘密鍵が必要であることがわかっていました。しかし、それを取り除いた後、私は全く同じ結果を得る。
  • コメントのおかげで、私はサーバの宣言からパスワードを削除しました。なぜなら、パスワードを使わずに動作するようにsudoを作成するのは、とにかくきれいな解決策だと思うからです。しかし、同じ結果。

今、私はこれをどのように診断するかについて考えていません。

何をしようとしているのかについての詳しい情報を得るために、ssh -vに相当するCapistranoがあるかどうかはわかりません。

明らかに私のSSH接続は問題ありませんが、Capistranoは接続に正しい設定を使用していないので、多分私は構文が間違っているか、何か同等に明白です。 sshkitに問題追う

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' 

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そのために、ここで私が現在持っているファイルは次のとおりです。

私は、capistranoが実際のSSH作業を行うためにsshkitを使用していることに気付いたので、そのためのテストプログラムを書きました。

#!/usr/bin/env ruby 

require 'sshkit' 
require 'sshkit/dsl' 

include SSHKit::DSL 

SSHKit.config.output_verbosity = Logger::DEBUG 

on '[email protected]' do 
    puts capture(:ls, '-l') 
end 

これは、同じキーを使用すると思われるにもかかわらず、パスワードを要求する同じ問題を示しています。冗長性をDEBUGに設定しても、作業に役立つ診断は実際に追加されていませんが。

はネットに問題を追う:: SSHを:sshkitための宝石をインストールする場合

は、私が実際のSSHの仕事をするために、ネットの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' [email protected] 
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ディレクトリには別の鍵があります。

+0

なぜ 'server'宣言に' password'オプションが含まれていますか?これは、公開鍵を使用した認証の意図と矛盾しているようです。 –

+0

これはsudo用ですが、今度はsudoパスワードの必要性を取り除くつもりだと思いますので、削除しました。残念ながら、それはまだログインできません。 – Trejkaz

答えて

1

ed25519の鍵はNet SSH 4.0.0alpha1-4でサポートされているようです。

https://github.com/net-ssh/net-ssh/issues/214

あなたはおそらく、RSAキーを使用するネットのssh 4.0.0alpha4へのアップグレード、または多分これを回避するためにSSHエージェントを使用することができます。

+0

無効なキーをスキップすることについての2回目のログはエージェントコードからのものであることがわかりました。エージェントは実行していましたが、ライブラリはとにかく好きではありませんでした。私はアップグレードを強制しようとします。どちらか、それとも単にRSA ...に戻ってください。これは、人々がDSAを推薦する前に使用していたものです。 :/ – Trejkaz

0

これは問題ではありませんか?

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の形式が気に入らないようです。

+0

申し訳ありませんが、私の答えは無視してください。私はあなたがすでにこれを発見したのを見ます。 net-sshがあなたの鍵を解析できない理由はわかりません。私はこのようなエラーに遭遇したことはありません。私はここで問題を開くことをお勧めします。うまくいけば、保守担当者はより多くの洞察を提供することができます:https://github.com/net-ssh/net-ssh –

+0

私の鍵は "有効"でしたが、他の答えであるEd25519ちょうどnet-sshで追加されました。私の古い鍵はUbuntuがサポ​​ートを停止したDSAでした。それが起こったとき、私は選択肢を見て、最も安全な選択肢を持って行った。私はそれがまた、いくつかのクライアント(net-sshを含む)がサポートしていない全く新しいオプションであったことは不運でした。 – Trejkaz

関連する問題