【问题标题】:R - Connect via ssh and execute a commandR - 通过 ssh 连接并执行命令
【发布时间】:2016-01-25 15:57:35
【问题描述】:

我想通过 ssh 连接到网络中的某些设备。

先决条件是:

  1. 它必须在 R 中运行命令并捕获 ssh 会话的输出(或使用 bash 或任何其他编程语言,但我更喜欢使用 R 语言)

  2. 必须输入明文密码(因为该设备之前没有被访问过,并且不能用rsa密钥对更改),所以ssh.utils包不符合这个要求

  3. sshpass 无法使用,因为我注意到它不适用于我测试的某些设备。

我已阅读所有这些帖子,但找不到有效的执行方法:link 1link 2link 3link 4

我知道要求很难完成,但感谢您的努力!

编辑:

对不起,如果我没有让自己可以理解。我的意思是我在 R 本地工作,我想通过 ssh 连接到我所有网络中的 +3000 台设备。是Ubiquiti设备,唯一开放的端口是80和22。

如果 ssh 不起作用,我将为 R 使用 RSelenium 包并从端口 80 提取信息。但首先我将尝试使用 ssh pory 22,因为它比打开模拟浏览器更有效。

所有这些 Ubiquiti 设备的最大问题是它们有登录密码。这就是为什么需要必备项 2 的原因。当我必须进入我知道的服务器时,我会花时间设置 rsa 密钥对,这样我就不必每次连接到特定服务器时都输入密码,但这是不可能的(或者至少,对我来说这是不可能的)使用这些密钥对配置所有 +3000 Ubiquiti 设备。

这就是为什么我不使用snmp的原因,例如,因为这个设备可能他们有没有激活它,或者snmp配置错误。我的意思是,我必须使用默认激活的东西,并且在某种程度上是有序的。而且只有80端口和22端口被激活,我知道所有的用户和密码设备。

sshpass 是 UNIX/Linux like this link explains 中的一个实用程序,它适用于服务器,但不适用于 Ubiquiti 设备,只要我已经对其进行了测试。所以我不能用它。

我需要从中提取输出的命令是mca-status。只需将其输入控制台,它就会打印一些我想从 Ubiquiti 设备中获取的统计数据。

如果我发布的内容有误,请纠正我。谢谢。

【问题讨论】:

    标签: r linux bash networking ssh


    【解决方案1】:

    我认为你错了。我也不知道你在第 2 点要说什么,我也不知道第 3 点应该说什么。

    现在:ssh 是一种身份验证机制,允许您(可信)访问另一台机器并能够运行命令。这可以很简单

    edd@max:~$ ssh bud Rscript -e '2+2'
    [1] 4
    edd@max:~$ 
    

    我从机器'max'(我的服务器)上的会话调用机器'bud'(我的桌面)上的R(或者更确切地说,Rscript)。该命令可以是 anything,包括写入临时或永久文件的内容。然后您可以通过scp 检索这些文件。

    身份验证是独立处理的——在 Unix 上,我们经常使用ssh-agent,它在后台运行并针对您在登录时进行身份验证。

    【讨论】:

    • 感谢您的回答。请查看我编辑的问题,如果这能让您更好地理解问题。
    • 嗯。您可能需要自己编写一些东西,也许调用mca-status 并摄取其输出。我不知道存在任何东西。
    【解决方案2】:

    最后我使用rPython 包和python 的paramiko 模块解决了这个问题,因为没有办法纯粹通过R。

    library(rPython)
    python.exec(python.code = c("import paramiko", 
                                "ssh = paramiko.SSHClient()",
                                "ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())",
                                sprintf('ssh.connect("%s", username="USER", password="PASSWORD") ', IP),
                                'stdin, stdout, stderr = ssh.exec_command("mca-status")',
                                'stats = stdout.readlines()'))
    

    【讨论】:

      猜你喜欢
      • 2014-01-28
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      相关资源
      最近更新 更多