R – 通过ssh连接并执行命令

我想通过SSH连接到networking中的某些设备。

必要条件是:

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

  2. 它必须input一个纯文本密码(因为这个设备以前没有被访问过,所以不能用rsa密钥对来修改),所以ssh.utils软件包不符合这个要求

  3. sshpass不能使用,因为我注意到它不适用于我testing的一些设备。

我已阅读所有这些post,但我找不到一个有效的方式来执行它: 链接1 , 链接2 , 链接3 , 链接4

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

编辑:

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

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

所有这些Ubiquiti设备的大问题是,他们有一个密码login。这就是为什么需要2号。 当我必须进入我知道的服务器时,我花时间设置rsa密钥对,以便每次连接到特定的服务器时不必input密码,但这是不可能的(至less对我来说是不可能的)用这些关键字configuration所有+3000 Ubiquiti设备。

这就是为什么我不使用snmp的原因,例如,因为这个设备可能会激活它,或者snmpconfiguration是错误的。 我的意思是,我必须使用默认激活的东西,并以某种方式sorting。 只有端口80和端口22被激活,我知道所有的用户和密码的设备。

sshpass是UNIX / Linux中的一个实用程序, 就像这个链接解释说 ,它适用于服务器,但不适用于Ubiquiti设备,只要我已经testing过了。 所以我不能使用它。

我需要从中提取输出的命令是mca-status 。 简单地通过input到控制台使它打印一些统计数据,我想从Ubiquiti设备。

请纠正我,如果我错了我已经发布的东西。 谢谢。

我想你有这个错误。 我也不知道你在第二点要说什么,我不知道第三点应该说什么。

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

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

我在机器“max”(我的服务器)上的一个会话上调用机器“bud”(我的桌面)上的R (或者说Rscript )。 该命令可以是任何东西,包括写入临时或永久文件的东西。 然后您可以通过scp来检索这些文件。

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

最后,我使用rPython包和python的paramiko模块解决了rPython问题,因为没有办法通过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()'))