tput: значение для $TERM и параметр -T не указаны при использовании Ruby Net:SSH

Я использую библиотеку Ruby Net:SSH для подключения ssh к удаленному ПК, а затем запускаю удаленный cmd. Когда я запускаю свое SSH-соединение, у меня нет проблем, но иногда, не везде, когда я использую exec! У меня есть ошибка, возвращенная в stderr, которая является tput: нет значения для $TERM и не указано -T.

Пример кода:

Net::SSH.start(nodeAddress, nodeLogin, :password => nodePassword, :port => nodePort) do |ssh|
 ssh.exec! "cat \"#{sftpSshKey}\"" do |channel, stream, data|
  if(stream == :stderr)
   return "error tput"
  end
 end
end

Если у кого-то есть идея или уже была эта проблема.

Пример с кошкой работает нормально, если я использую это, я получаю ошибку tput:

ssh.exec! "test -r \"#{sftpSourceFile}\" && echo \"Read\" || echo \"NRead\"" do |channel, stream, data|

Если я использую это, у меня нет ошибки:

ssh.exec! "test -w \"#{nodeDestinationPath}\" && echo \"Write\" || echo \"NWrite\"" do |channel, stream, data|

С Уважением.


person Frage    schedule 10.05.2021    source источник
comment
Когда вы используете команду ssh для выполнения команды на другом компьютере, и этой команде нужно что-то прочитать из консоли, вы должны указать ключ -t. Ваш код эквивалентен этому, поэтому вам нужен Net::SSH-эквивалент переключателя -t.   -  person Wayne Conrad    schedule 10.05.2021


Ответы (1)


Этот пример из исходного кода Net::SSH показывает, как использовать канал для выполнения интерактивной команды, а затем считывать выходные данные команды и предоставлять вводные данные для команды.

      #   ssh.open_channel do |channel|
      #     channel.exec("/invoke/some/command") do |ch, success|
      #       abort "could not execute command" unless success
      #
      #       channel.on_data do |ch, data|
      #         puts "got stdout: #{data}"
      #         channel.send_data "something for stdin\n"
      #       end
      #
      #       channel.on_extended_data do |ch, type, data|
      #         puts "got stderr: #{data}"
      #       end
      #
      #       channel.on_close do |ch|
      #         puts "channel is closing!"
      #       end
      #     end
      #   end
      #
      #   ssh.loop
person Wayne Conrad    schedule 10.05.2021