Net :: SSH работает из консоли производственных рельсов, AuthenticationFailed из рабочего веб-приложения - PullRequest
2 голосов
/ 23 сентября 2011

У меня есть приложение rails, где пользователь может отправить форму, и она отключается и подключается к удаленному серверу через ssh для вызова скрипта. В конце концов я планирую использовать delayed_job или что-то в этом роде, но я не могу заставить его работать на производстве даже с помощью простого теста.

Странно то, что Net :: SSH прекрасно работает с консоли в работе, но завершается неудачно с AuthenticationFailed, когда я отправляю форму в работе. И консоль, и веб-приложение прекрасно работают в процессе разработки.

Ошибка:

Net :: SSH :: AuthenticationFailed (my_ssh_username):

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

app / controllers / branch_controller.rb: 55: в `update '

Действие обновления контроллера:

  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

Метод, который я вызываю, в основном копируется / вставляется из примера API Net :: SSH:

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

Я пробовал с и без: verbose,: keys,: auth_methods; будьте осторожны, чтобы каждый раз перезапускать apache, но в производственном процессе он всегда работает с консоли (с RAILS_ENV = производство экспортируется до вызова rails c) и никогда не работает из веб-приложения.

Я также приветствовал бы любые рекомендации о том, как получить улучшенную запись в журнал, когда я вызываю его из веб-приложения: подробный текст работал для меня в консоли, но ничего не добавлял в мой production.log

1 Ответ

0 голосов
/ 17 мая 2012

Когда вы запускаете его из консоли, вы используете свою собственную учетную запись, верно?

Это довольно странно, но я предполагаю, что ваше рабочее веб-приложение работает под учетной записью, которая неимеют доступ для чтения к "/home/www-data/.ssh/my_ssh_username_id_rsa".

Из вашего описания почти наверняка должна быть проблема с разрешениями.

...