【问题标题】:SSH connection with Ruby without username using `authorized_keys`使用 `authorized_keys` 与没有用户名的 Ruby 建立 SSH 连接
【发布时间】:2012-02-25 00:44:50
【问题描述】:

我已经使用authorized_keys push 对服务器进行了身份验证,因此我可以从我的系统运行命令ssh 192.168.1.101 并可以通过服务器进行连接。

现在,我尝试了 library ,它对我不起作用

  Net::SSH.start("192.168.1.209",username) do |ssh|   @output=ssh.exec!("ls -l")  end

as,这是必需的用户名字段。我想要没有用户名。

所以,我试过了

    system('ssh 192.168.1.209 "ls -l"') 

它为我运行命令。但我希望在第一个示例中像@output 这样的变量输出。有什么命令可以让我得到解决方案吗?

【问题讨论】:

  • 另外,我需要在请求中运行 5-10 个命令..

标签: ruby ruby-on-rails-3 shell command-line-arguments net-ssh


【解决方案1】:

任何 ssh 连接都需要用户名。默认值是您的系统帐户名称或.ssh/config 中为您要连接的主机指定的任何名称。

如果您需要访问,您当前的用户名应设置为ENV['USER']

如果您对用于该连接的用户名感到好奇,请尝试使用 ssh -v 查找,这是解释发生了什么的详细模式。

【讨论】:

  • 实际上在 shell 提示符下,我可以运行 ssh 192.168.1.209 它连接而无需询问用户名,因为我复制了密钥并添加到了 authorized_keys 中。
  • 即使使用授权密钥,也始终需要用户名,因为密钥不一定告诉服务器哪个用户正在登录。可能ssh 正在从操作系统或配置文件中获取您的用户名
  • 没错,您可以在没有它询问用户名的情况下进行连接,但这并不意味着它没有使用用户名
【解决方案2】:

您可以将参数传递给 %x[],如下所示:

1. dom = ‘www.ruby-rails.in‘
2. @whois = %x[whois #\{dom\}]

【讨论】:

    【解决方案3】:

    反引号的工作方式与“系统”功能非常相似,但有重要区别。用反引号括起来的 Shell 命令执行,结果是标准输出。

    所以,下面的语句应该执行 ssh 192.168.1.209 "ls -l" 并将目录文件列表放入@output变量:

    @output = `ssh 192.168.1.209 "ls -l"`
    

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      相关资源
      最近更新 更多