Символы через SSH - PullRequest
       1

Символы через SSH

0 голосов
/ 05 июня 2018

Я пытаюсь открыть SSH-соединение с локального компьютера на удаленный компьютер, запустив sender.rb на локальном компьютере и вызывая скрипт receiver.rb на удаленном компьютере, предоставив пароль в качестве аргумента.

sender.rb

require 'net/ssh'

ssh_opts = {
    :host_name=>"19.09.20.18",
    :user=>"manual-ace",
    :password=>"42bike24",
    :port=>1800,
    :auth_methods=>["password"],
}

Net::SSH.start(nil, nil, ssh_opts) do |ssh|
  psw = "TEst$1234".encode("UTF-8")
  p ssh.exec!("ruby path/to/receiver.rb #{psw}")
end

receive.rb

ARGV.each do |my_str|
  p my_str # OUTPUT: "TEst234"
end

У меня проблема, по-видимому, связанная с интерпретацией строки командой bash.Символы в пароле не принимаются по мере их отправки.$1 удаляется из текста.Вставка $ удаляет следующий символ;наличие двух или более $ удаляет все символы между первым и последующим последним (T$Es$t12$34 становится T4).Некоторые другие символы, такие как <>\;", имеют такое же поведение или повышают bash: (command): command not found.

Я пытался работать с кодировкой и Shellwords.Я хотел бы использовать специальные символы для паролей , такие как !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~, хотя любой печатный символ, который должен быть введен пользователем, .

1 Ответ

0 голосов
/ 05 июня 2018

Вы должны правильно экранировать аргументы, например, через shelljoin:

require 'shellwords'

psw = "TEst$1234"
['ruby', 'path/to/receiver.rb', psw].shelljoin
#=> "ruby path/to/receiver.rb TEst\\$1234"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...