我试图通过在本地计算机上运行sender.rb
来打开从本地计算机到远程计算机的SSH连接,并在远程计算机上调用脚本receiver.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
ARGV.each do |my_str|
p my_str # OUTPUT: "TEst234"
end
我有一个问题似乎与bash将字符串解释为命令有关。密码中的符号在发送时不会被接收。 $1
已从文本中删除。插入$
会删除以下字符;如果有两个或多个$
,则会删除第一个字符与最后一个字符之后的所有字符(T$Es$t12$34
变为T4
)。其他一些字符(例如<>\;"
)具有相同的行为或引发bash: (command): command not found
。
我尝试使用encoding和Shellwords
。我想使用!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
,例如{{1}},special characters for passwords。
答案 0 :(得分:1)
您必须正确转义参数,例如通过shelljoin
:
require 'shellwords'
psw = "TEst$1234"
['ruby', 'path/to/receiver.rb', psw].shelljoin
#=> "ruby path/to/receiver.rb TEst\\$1234"