通过SSH的符号

时间:2018-06-05 08:56:06

标签: ruby ssh

我试图通过在本地计算机上运行sender.rb来打开从本地计算机到远程计算机的SSH连接,并在远程计算机上调用脚本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

receiver.rb

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

我有一个问题似乎与bash将字符串解释为命令有关。密码中的符号在发送时不会被接收。 $1已从文本中删除。插入$会删除以下字符;如果有两个或多个$,则会删除第一个字符与最后一个字符之后的所有字符(T$Es$t12$34变为T4)。其他一些字符(例如<>\;")具有相同的行为或引发bash: (command): command not found

我尝试使用encodingShellwords。我想使用!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~,例如{{1}},special characters for passwords

1 个答案:

答案 0 :(得分:1)

您必须正确转义参数,例如通过shelljoin

require 'shellwords'

psw = "TEst$1234"
['ruby', 'path/to/receiver.rb', psw].shelljoin
#=> "ruby path/to/receiver.rb TEst\\$1234"