使用Ruby自动SSH到Windows
发布时间:2020-12-16 19:02:29 所属栏目:百科 来源:网络整理
导读:我有一台运行Jenkins Slaves的13台 Windows服务器.由于某种原因(Windows更新?),Jenkins从属服务器定期退出工作,需要重新启动Jenkins Slave服务.如果我手动SSH到机器(cygwin ssh服务器正在运行)我只需键入: net stop "Jenkins Slave"net start "Jenkins Sla
我有一台运行Jenkins Slaves的13台
Windows服务器.由于某种原因(Windows更新?),Jenkins从属服务器定期退出工作,需要重新启动Jenkins Slave服务.如果我手动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 } 脚本在所有机器上执行,我看到服务已经启动的输出.但是,这永远不会奏效.当我回到机器时,服务还没有开始. 可悲的是,我无法使用Linux – 我无法控制这些机器. 关于为什么手动执行SSH工作的任何想法,但脚本没有? 谢谢 解决方法
我在Pry试了一下,发现了两个问题:
> HOST未定义,它应该是主机,因为这是传递给块的变量. 此外,当一个块延伸超过1行时,我将其切换为使用do … end的惯用Ruby模式. hosts.each do |host| puts "SSHing #{host} ..." Net::SSH.start( host.to_s,:password => PASS ) do |ssh| puts ssh.exec!('date') puts "Logging out..." end end 我在Pry测试了这个,它现在正在工作.我希望这有帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |