2

I have a rails app where a user can submit a form and it goes off and connects to a remote server via ssh to call a script. Eventually I plan to use delayed_job or something like that but I can't get it to work in production with even a simple test.

The odd thing is, Net::SSH works just fine from the console in production, but it fails with AuthenticationFailed when I submit the form in production. Both the console and the webapp work fine in development.

The error:

Net::SSH::AuthenticationFailed (my_ssh_username):

app/models/branch.rb:69:in `ssh_to_machine'

app/controllers/branches_controller.rb:55:in `update'

Controller's update action:

  def update
    @branch = Branch.find(params[:id])
    if @branch.update_attributes(params[:branch])
      @branch.ssh_to_machine(@branch.hostname, @branch.user_name, @branch.command_to_run)
      redirect_to @branch, :notice  => "Update request now processing."
    else
      render :action => 'edit'
    end
  end

Method I'm calling, mostly copy/pasted from the Net::SSH api example:

def ssh_to_machine(host_name, user_name, command_to_run)
    require 'net/ssh'
    Net::SSH.start(host_name, user_name, { :verbose => Logger::DEBUG, :keys => %w{ /home/www-data/.ssh/my_ssh_username_id_rsa }, :auth_methods => %w{ publickey } }) do |ssh|
      # capture all stderr and stdout output from a remote process
      output = ssh.exec!("hostname")

      # run multiple processes in parallel to completion
      ssh.exec command_to_run
      ssh.loop
    end
end

I've tried it with and without :verbose, :keys, :auth_methods; being careful to restart apache each time, but in production it always works from the console (with RAILS_ENV=production exported before calling 'rails c') and never works from the webapp.

I would also welcome any recommendations on how to get enhanced logging when I do call it from the webapp - :verbose worked for me at the console but didn't add anything to my production.log.

4

1 回答 1

0

当您从控制台运行它时,您使用的是自己的帐户,对吗?

这有点奇怪,但我的猜测是您的生产网络应用程序正在一个对“/home/www-data/.ssh/my_ssh_username_id_rsa”没有读取权限的帐户下运行。

根据您的描述,它几乎必须是某种权限问题。

于 2012-05-17T03:12:40.170 回答