Команда Ruby net-ssh с прокси-сервером вызывает зависание

Я хотел бы подключиться к удаленному компьютеру через другой, используя ruby.

Эта схема следующая:

Локальный -> прокси -> удаленный

У меня есть этот код, который выполняет работу для прямого доступа:

require 'net/ssh'
Net::SSH.start(remote_host, remote_user) do |ssh|
    puts ssh.exec!'hostname'
end

Однако, когда я пытаюсь использовать прокси, команда «имя хоста» выполняется и корректна, но затем код зависает, то же самое, если я вызываю ssh.close.

Вот код:

require 'net/ssh'
require 'net/ssh/proxy/command'

proxy_cmd = Net::SSH::Proxy::Command.new('ssh proxy_user@proxy_host nc %h %p')
Net::SSH.start(remote_host, remote_user, :proxy => proxy) do |ssh|
    puts ssh.exec!'hostname'
end

Вход в систему осуществляется без пароля благодаря ключу rsa. И прокси-команда работает (раньше я использовал ее в bash)

Кто-нибудь знает, что я делаю неправильно?

Большое спасибо за ваш интерес,

РЕДАКТИРОВАТЬ: вот последняя строка в журналах, она там блокируется:

I, [2013-10-16T23:01:19.304778 #3785]  INFO -- net.ssh.connection.session[4555128]: closing remaining channels (0 open)

person j.flajo    schedule 16.10.2013    source источник


Ответы (1)


Я только что столкнулся с той же проблемой - командная строка ssh работала, а net / ssh зависал у меня при использовании proxycommand.

Отладка net/ssh привела меня к: https://github.com/net-ssh/net-ssh/blob/master/lib/net/ssh/transport/session.rb#L113 и все это висело на .close вызов сокета.

Я не уверен, что вызвало это, но добавление тайм-аута к команде nc, похоже, решило это:

ProxyCommand ssh proxy_server@proxy_server nc -q 1 %h %p

person madsheep    schedule 30.06.2014
comment
Вы когда-нибудь находили менее хакерский способ решить эту проблему? - person Saul; 06.02.2016
comment
непривлекательное решение, потому что не все nc созданы равными. У моей виртуальной машины Ubuntu есть этот флаг, а у моей Fedora27 нет. И давайте не будем запускать встроенный (busybox) - person nhed; 06.03.2018
comment
также - ваша ссылка на код на github должна быть на что-то более постоянное, например, на конкретный хеш - строка 113 вряд ли будет такой же через год. - person nhed; 06.03.2018