【问题标题】:Rails/net-ssh - ssh to remote server with private key in HerokuRails/net-ssh - 使用 Heroku 中的私钥 ssh 到远程服务器
【发布时间】:2017-12-27 23:00:27
【问题描述】:

我正在尝试通过 Heroku 使用私钥 ssh 到远程服务器。

我正在使用这个 gem https://github.com/net-ssh/net-ssh 来完成请求并让一切在本地正常工作。

在本地一切正常的原因是我保存了输入密码的私钥。当我部署到 Heroku 时,我无法像在我的 PC 上那样使用代理,因此连接失败。

我已更改使用 net-ssh 的连接设置,不使用代理,但仍无法使其正常运行。

在最坏的情况下,我将不得不在托管在其他地方的 php 中创建一个单独的 API 调用来完成此连接,但我希望我可以通过我在 Heroku 中的 rails 应用程序使其工作。

这是我目前正在做的事情:

options = {}    
options[:key_data] = ENV['LANDING_PAGE_SSH_KEY']
options[:keys_only] = true
options[:use_agent] = false
options[:verbose] = :debug
options[:port] = '18765'
options[:passphrase] = ENV['SSH_KEY_PASSPHRASE']

Net::SSH.start(ENV['SERVER_HOSTNAME'], ENV['SERVER_USERNAME'], options) do |ssh|

end

我已经在全局变量中输入了私钥以及我需要的所有其他内容。这在不使用代理的情况下也可以在本地工作,但在 Heroku 上失败并显示以下消息:

[2017-07-21T19:20:35.506794 #4] DEBUG -- socket[383b2bc]: read 52 bytes
2017-07-21T19:20:35.507070+00:00 app[web.1]: D, [2017-07-21T19:20:35.507016 #4] DEBUG -- socket[383b2bc]: received packet nr 3 type 6 len 28
2017-07-21T19:20:35.507262+00:00 app[web.1]: D, [2017-07-21T19:20:35.507210 #4] DEBUG -- net.ssh.authentication.session[3fd3f610f914]: trying none
2017-07-21T19:20:35.507477+00:00 app[web.1]: D, [2017-07-21T19:20:35.507412 #4] DEBUG -- socket[383b2bc]: queueing packet nr 4 type 50 len 44
2017-07-21T19:20:35.507603+00:00 app[web.1]: D, [2017-07-21T19:20:35.507553 #4] DEBUG -- socket[383b2bc]: sent 68 bytes
2017-07-21T19:20:35.536336+00:00 app[web.1]: D, [2017-07-21T19:20:35.536194 #4] DEBUG -- socket[383b2bc]: read 52 bytes
2017-07-21T19:20:35.536472+00:00 app[web.1]: D, [2017-07-21T19:20:35.536422 #4] DEBUG -- socket[383b2bc]: received packet nr 4 type 51 len 28
2017-07-21T19:20:35.536573+00:00 app[web.1]: D, [2017-07-21T19:20:35.536526 #4] DEBUG -- net.ssh.authentication.session[3fd3f610f914]: allowed methods: publickey
2017-07-21T19:20:35.536657+00:00 app[web.1]: D, [2017-07-21T19:20:35.536612 #4] DEBUG -- net.ssh.authentication.methods.none[3fd3f6103e84]: none failed
2017-07-21T19:20:35.536749+00:00 app[web.1]: D, [2017-07-21T19:20:35.536703 #4] DEBUG -- net.ssh.authentication.session[3fd3f610f914]: trying publickey
2017-07-21T19:20:35.537566+00:00 app[web.1]: Enter passphrase for <key in memory>:Completed 500 Internal Server Error in 337ms (ActiveRecord: 1.4ms)
2017-07-21T19:20:35.538404+00:00 app[web.1]: 
2017-07-21T19:20:35.538406+00:00 app[web.1]: Errno::ENOTTY (Inappropriate ioctl for device):

有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails heroku


    【解决方案1】:

    在我的情况下,我需要将私钥添加到服务器的 ssh 设置中

    ssh-add ~/.ssh/path-to-private-key
    

    它开始工作了。

    【讨论】:

    • 这是什么意思,你是怎么做到的?
    • @Sebastien 您需要在运行您的代码的服务器上运行此命令。 net-ssh 仅在底层主机上使用 ssh 客户端,因此您需要通过添加它来告诉您的客户端您要用于 ssh 身份验证的私钥。 ssh.com/ssh/add
    猜你喜欢
    • 2014-12-14
    • 2012-11-26
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 2022-07-11
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多