Я пытаюсь использовать библиотеку Net :: SSH для входа в систему и управления хостом, который поддерживает ssh. Это часть телекоммуникационного оборудования, и поэтому говорит TL1. Кажется, я могу успешно войти в систему, но когда я пытаюсь что-то сделать с ssh.exec, он прерывает высказывание, что не может выполнить команду. Вот мой простой код:
require 'net/ssh'
Net::SSH.start('10.204.121.192', 'password', :password => "password") do |ssh|
ssh.exec("INH-MSG-ALL;")
end
Если я укажу тот же код на сервере Linux и предоставил такую команду, как «ls -l /», он отлично работает. Мне интересно, могу ли я использовать эту библиотеку ssh? Нужно ли использовать другую команду вместо exec?
Это вывод ошибки:
/usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh/connection/session.rb:322:in `block (2 levels) in exec': could not execute command: "INH-MSG-ALL;" (RuntimeError)
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh/connection/channel.rb:597:in `call'
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh/connection/channel.rb:597:in `do_failure'
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh/connection/session.rb:586:in `channel_failure'
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh/connection/session.rb:456:in `dispatch_incoming_packets'
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh/connection/session.rb:213:in `preprocess'
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh/connection/session.rb:197:in `process'
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh/connection/session.rb:161:in `block in loop'
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh/connection/session.rb:161:in `loop'
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh/connection/session.rb:161:in `loop'
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh/connection/session.rb:110:in `close'
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/net-ssh-2.2.1/lib/net/ssh.rb:194:in `start'
from ssh_test.rb:3:in `'
Я предполагаю, что он отлично работает при входе в оболочку вручную.
Чтобы понять, в чем разница, когда вы подключаетесь через net/ssh, собираете вывод команды env
в обоих случаях и сравниваете.
Это, скорее всего, вы увидите разницу, которая приведет вас к решению или, по крайней мере, даст вам грязный трюк.
ОБНОВИТЬ. (Не работает)
Net::SSH.start('10.204.121.192', 'password', :password => "password") do |ssh|
ssh.open_channel do |channel|
channel.on_data do |ch, data|
puts "got data: #{data.inspect}"
end
channel.send_data("INH-MSG-ALL;\n")
end
end
<Сильный> UPDATE2. (Рабочий)
Net::SSH.start('10.204.121.192', 'password', :password => "password") do |ssh|
ssh.open_channel do |channel|
channel.send_channel_request "shell"
channel.on_data do |ch, data|
puts "got data: #{data.inspect}"
end
channel.send_data("INH-MSG-ALL;\n")
end
end
Спасибо forker за ваши обновления),
Еще кое-что,
от вашего кода, как сделать это
puts "got data: #{data.inspect}"
для вывода данных для каждой команды, отправленной в оболочку?
Означает ли этот код выполнение каждой команды?
Благодарю.