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