当前位置: 首页 > 面试题库 >

使用Ruby自动将SSH传输到Windows

谷梁煌
2023-03-14
问题内容

我有13台运行Jenkins从站的Windows服务器。由于某些原因(Windows更新?),Jenkins从属设备会定期退出工作,并且需要重新启动Jenkins从属服务。如果我手动SSH到计算机(cygwin
ssh服务器正在运行),则只需键入:

net stop "Jenkins Slave"
net start "Jenkins Slave"

这(几乎)总是可以解决问题。

所以我写了一个Ruby脚本来自动化它。

这里是:

#!/usr/bin/env ruby
require 'rubygems'
require 'net/ssh'

USER = 'Administrator'
PASS = 'PASSWORD'
hosts = [:breckenridge, :carbondale, :crestone, :denali, :gunnison, :sneffels, "mammoth", "whitney", "snowmass", "firestone",  "avon", :grizzly, :silverton]

hosts.each {|host|
    puts "SSHing #{host} ..." 
    Net::SSH.start( HOST, USER, :password => PASS ) do |ssh|
        puts ssh.exec!('net stop "Jenkins Slave"')
        puts ssh.exec!('net start "Jenkins Slave"')
        puts "Logging out..."
    end
}

该脚本在所有计算机上执行,我看到该服务已启动的输出。但是,这 永远 行不通。当我ssh返回机器时,该服务尚未启动。

可悲的是,我不能使用Linux-我无法控制这些机器。

关于为什么手动执行SSH起作用但脚本不起作用的任何想法?

谢谢菲尔


问题答案:

我在Pry中进行了尝试,发现了两个问题:

  1. HOST是未定义的,应该是host因为它是传递到块中的变量。
  2. SSH.start期望参数为STRINGclass,因此添加.to_s如下所示的。

另外,我将其切换为惯用的Ruby模式,即do...end当一个块超出1行时使用。

hosts.each do |host|
    puts "SSHing #{host} ..." 
    Net::SSH.start( host.to_s, USER, :password => PASS ) do |ssh|
        puts ssh.exec!('date')
        puts "Logging out..."
    end
end

我在Pry中对此进行了测试,现在可以使用了。我希望这有帮助。



 类似资料:
  • 我需要将文件从远程服务器复制到本地服务器,然后使用JMETER使用SSH SFTP进行尝试。我提供了登录凭据,并在“文件传输”部分中,选择了操作 - PUT源路径 - 远程路径( /ftp / xxx / yyy)目标 - 本地路径。 收到错误为` Java . io . file not found exception:C:\ Apache-jmeter-5 . 1 . 1 \ bin \ FT

  • FileZilla在尝试通过SFTP模式连接到AWS实例时抛出错误。实例运行在Ubuntu 13.10上。 连接参数:

  • 译者:冯宝宝 在本教程中,我们将介绍如何使用ONNX将PyTorch中定义的模型转换为ONNX格式,然后将其加载到Caffe2中。一旦进入Caffe2,我们就可以运行模型来仔细检查它是否正确导出,然后我们展示了如何使用Caffe2功能(如移动导出器)在移动设备上执行模型。 在本教程中,你需要安装onnx和Caffe2。您可以使用pip install onnx获取onnx的二进制版本。 注意: 本

  • 问题内容: 我目前正在使用名为s3-upload-stream的node.js插件将非常大的文件流式传输到Amazon S3。它使用了多部分的API,并且在大多数情况下效果很好。 但是,该模块显示了它的年龄,我已经不得不对其进行修改(作者也已弃用了它)。今天,我遇到了另一个与亚马逊有关的问题,我真的很想接受作者的建议,并开始使用官方的aws- sdk完成上传。 但。 官方的SDK似乎不支持管道到。

  • 问题内容: 我在通过SSH将响应传递到远程服务器上的bash脚本时遇到问题。 我正在用Python 3.6.5编写程序,该程序将SSH到远程Linux服务器。在此远程Linux服务器上,有一个正在运行的bash脚本,需要用户输入才能填充。无论出于何种原因,我都无法通过SSH从原始python程序传递用户输入,而无法填写bash脚本用户输入的问题。 main.py SSH.py 类中的最后一个是启动

  • 我正在运行一个通过ssh会话运行的程序。这意味着我使用putty连接到一个linux,程序开始,使用/etc/bash.bashrc文件。在某个时候,程序应该结束,通过putty的ssh会话应该断开连接。我现在用下面的代码做了一些事情,但它不起作用:程序退出,并留在linux shell中,这意味着putty已经连接好了。我所期望的是命令“exit”来结束putty ssh会话。 谢谢你的帮助。