代码之家  ›  专栏  ›  技术社区  ›  Gsk

通过ssh的符号

  •  -1
  • Gsk  · 技术社区  · 7 年前

    我试图通过运行以下命令打开从本地计算机到远程计算机的ssh连接 sender.rb 在本地计算机上,并调用脚本 receiver.rb 在远程计算机上,提供一个密码作为参数。

    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 . 我想用 special characters for passwords !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 虽然,虽然 any printable character that the user inputs should be allowed .

    1 回复  |  直到 7 年前
        1
  •  1
  •   Stefan    7 年前

    你必须适当地 逃跑 参数,例如via shelljoin :

    require 'shellwords'
    
    psw = "TEst$1234"
    ['ruby', 'path/to/receiver.rb', psw].shelljoin
    #=> "ruby path/to/receiver.rb TEst\\$1234"
    
    推荐文章