簡體   English   中英

Rails 應用程序中的 Capistrano 部署錯誤

[英]Capistrano deployment error in rails application

我在我的 Rails 應用程序中進行 cap 生產部署時遇到此錯誤,我的 net-ssh 版本是 5.0.2,誰能幫我解決這個問題。 我的服務器是彪馬

#<Thread:0x00007fe400cfb5e8@/Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
    26: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
    25: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/backends/abstract.rb:29:in `run'
    24: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/backends/abstract.rb:29:in `instance_exec'
    23: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/capistrano-rvm-0.1.2/lib/capistrano/tasks/rvm.rake:9:in `block (3 levels) in <top (required)>'
    22: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/backends/abstract.rb:64:in `capture'
    21: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/backends/abstract.rb:145:in `create_command_and_execute'
    20: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/backends/abstract.rb:145:in `tap'
    19: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/backends/abstract.rb:145:in `block in create_command_and_execute'
    18: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/backends/netssh.rb:129:in `execute_command'
    17: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/backends/netssh.rb:176:in `with_ssh'
    16: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/backends/connection_pool.rb:59:in `with'
    15: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/sshkit-1.17.0/lib/sshkit/backends/connection_pool.rb:59:in `call'
    14: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh.rb:246:in `start'
    13: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/session.rb:71:in `authenticate'
    12: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/session.rb:71:in `each'
    11: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/session.rb:85:in `block in authenticate'
    10: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/methods/publickey.rb:19:in `authenticate'
     9: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/key_manager.rb:119:in `each_identity'
     8: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/key_manager.rb:119:in `each'
     7: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/key_manager.rb:122:in `block in each_identity'
     6: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/methods/publickey.rb:20:in `block in authenticate'
     5: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/methods/publickey.rb:62:in `authenticate_with'
     4: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/key_manager.rb:142:in `sign'
     3: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/key_factory.rb:44:in `load_private_key'
     2: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/key_factory.rb:53:in `load_data_private_key'
     1: from /Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/key_factory.rb:113:in `classify_key'
/Users/synup/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/ed25519_loader.rb:21:in `raiseUnlessLoaded': OpenSSH keys only supported if ED25519 is available (NotImplementedError)
net-ssh requires the following gems for ed25519 support:
 * ed25519 (>= 1.2, < 2.0)
 * bcrypt_pbkdf (>= 1.0, < 2.0)
cap aborted!
NotImplementedError: OpenSSH keys only supported if ED25519 is available
net-ssh requires the following gems for ed25519 support:
 * ed25519 (>= 1.2, < 2.0)
 * bcrypt_pbkdf (>= 1.0, < 2.0)
See https://github.com/net-ssh/net-ssh/issues/565 for more information
Gem::LoadError : "ed25519 is not part of the bundle. Add it to your Gemfile."

對我來說只是在終端上執行

ssh-add

這奏效了。

至少在 Mac OS 上,如果您在系統啟動后不 ssh-add [yourkey],您將收到此錯誤。

盡管您可以通過添加其他答案建議的 gem 來解決此錯誤,但您不一定要這樣做。

另一種方法是遵循 Puppet 的 Bolt 工具的已知問題中給出的建議,尤其是這個

以防萬一鏈接消失,解決方案是以 PEM 格式而不是 OpenSSH 生成您的 SSH 密鑰。 您可以通過向ssh-keygen命令添加一個額外選項來實現此目的:

ssh-keygen -t rsa -m PEM

我已經能夠成功地使用這種技術來避免添加額外的寶石。

我的工作解決方案:

文件

  gem 'net-ssh', '>= 6.0.2'
  gem 'ed25519', '>= 1.2', '< 2.0'
  gem 'bcrypt_pbkdf', '>= 1.0', '< 2.0'

將這些寶石添加到您的 Gemfile 中,

gem 'rbnacl', '< 5.0', :require => false                                                                                                                                                                
gem 'rbnacl-libsodium', :require => false                                                                                                                                                               
gem 'bcrypt_pbkdf', '< 2.0', :require => false

然后運行bundle install並重試。

這與我解決了同樣的問題

ssh-agent -s  && ssh-add ~/.ssh/id_rsa

在多用戶開發服務器中,沒有root權限,這解決了:

eval `ssh-agent -s`
ssh-add
gem install ed25519 bcrypt_pbkdf

對於使用 ed25519 算法生成的新密鑰,這修復了它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM