`

使用Net::SSH和Net::SCP编写Linux服务器管理脚本

    博客分类:
  • Ruby
 
阅读更多

原文:http://rubyer.me/blog/1133/

有没有这样一个需求:
同时向几十上百台Linux服务器上传文件并执行命令,如果一个个来,那你就真是挨踢民工。程序员要发挥自己懒惰的个性,借用Net::SSH和net::SCP用Ruby写个脚本你会发现非常简单。

Net::SSH和Net::SCP是两个Ruby操作SSH的gem包。Net::SSH相当于cmd,专门用于执行命令;Net::SCP专门用于传输文件。它们俩结合,可以做任何SSH client能做的事情。

 

安装:
gem install net-ssh
gem install net-scp

以下所有代码都引用这段代码

require 'net/ssh'
require 'net/scp'

HOST = '192.168.1.1'
USER = 'username'
PASS = 'password'

1、使用Net::SSH执行一个命令

Net::SSH.start( HOST, USER, :password => PASS ) do |ssh|
   result = ssh.exec!('ls')
   puts result
end

Net::SSH.start会与目标主机建立一个连接,并返回一个代表连接的session。如果后面接收一个block,会在block结束时自动关闭连接。否则要自己关闭连接。注意密码作为一个hash参数传递,是因为SSH登录验证方式比较多,需要的参数变化多样。

2、使用NET-SFTP传输文件。

如果不需要执行命令,仅仅是传输文件,可以使用Net::SCP.start,类似Net::SSH.start

Net::SCP.start( HOST, USER, :password => PASS ) do |scp|
   scp.upload!( 'c:/scp1.rb', '/home/oldsong/' )
   scp.download!( '/home/oldsong/test.txt', 'c:/' )
end

3、如果即要传输文件,又要执行命令,scp不必重新建立连接,借用ssh连接即可

Net::SSH.start( HOST, USER, :password => PASS ) do|ssh|
  logfiles = ssh.exec!( 'ls *.log' ).split

  logfiles.each do |l|
    ssh.scp.download!( l, l )
  end
end

4、如果要传输大文件,最好能显示传输进度,不然好久没反应,还会以为死机了呢。

Net::SSH.start( HOST, USER, :password => PASS ) do|ssh|
  ssh.scp.upload!( 'large.zip', '.' ) do|ch, name, sent, total|
    print "\r#{name}: #{(sent.to_f * 100 / total.to_f).to_i}%"
  end
end

5、上传一个目录,包括子目录中的所有文件。加上“:recursive => true”参数。

Net::SSH.start( HOST, USER, :password => PASS ) do|ssh|
  ssh.scp.download!( 'logs', '.', :recursive => true )
end

6、如果下载后不想保存成文件,而是放到内存中直接处理,只要不给download!传递本地文件名即可,会返回一个字符串。

Net::SCP.start( HOST, USER, :password => PASS ) do|scp|
  puts scp.download!('log.txt').split(/\n/).grep(/^ERROR/)
end

7、scp最高级应用,根据事件显示所有传输信息。

Net::SCP.start( HOST, USER, :password => PASS ) do|scp|
  sftp.upload!(f, remote_file) do |event, uploader, *args|
	case event
	  # args[0] : file metadata
	  when :open
		puts "start uploading.#{args[0].local} -> #{args[0].remote} #{args[0].size} bytes}"
	  when :put then
		# args[0] : file metadata
		# args[1] : byte offset in remote file
		# args[2] : data being written (as string)
		puts "writing #{args[2].length} bytes to #{args[0].remote} starting at #{args[1]}"
	  when :close then
		# args[0] : file metadata
		puts "finished with #{args[0].remote}"
	  when :mkdir then
		# args[0] : remote path name
		puts "creating directory #{args[0]}"
	  when :finish then
		puts "all done!"
	end
  end

  puts "upload success"
end
分享到:
评论

相关推荐

    Linux批量scp命令执行工具 可批量对多个Linux主机执行传输文件命令 方便省力 适合统一化管理Linux服务器

    总的来说,Linux批量scp命令执行工具是Linux服务器管理员的得力助手,它简化了多主机文件传输的过程,提高了工作效率,同时也降低了出错的可能性。对于那些管理着众多Linux服务器的人来说,掌握并合理运用这样的工具...

    System_Ssh_scp.rar_linux scp_scp_system scp

    要从一台服务器A向另一台服务器B和C发送文件,我们可以编写一个脚本,如压缩包中的`System_Ssh_scp.sh`。这个脚本将包含一系列SCP命令,每个命令对应一个目标服务器。在执行脚本时,确保已经正确配置了SSH密钥对以...

    ssh脚本,ssh脚本,ssh脚本

    在Linux和Unix-like操作系统中,SSH脚本通常使用Shell脚本语言编写,如Bash。 首先,了解SSH的基本概念至关重要。SSH提供了加密的网络通信,包括命令行接口的会话、文件传输(如scp和sftp)以及自动化任务。它的...

    python 实现ssh的执行远端命令和scp的不同机器文件传输功能

    用python 实现ssh的执行远端命令和scp的不同机器文件传输功能。代码简练易懂。

    SSH脚本文件.zip

    SSH脚本是利用SSH协议实现自动化任务的一种方式,尤其适用于系统管理员进行批量操作、远程管理服务器或者执行定期维护任务。 在"SSH脚本文件.zip"中,我们有一个名为"ssh脚本文件"的压缩包,其中很可能包含了用于...

    SSH 连接工具

    4. **文件传输**:了解如何使用`scp`或`sftp`命令进行文件和目录的上传与下载,或者利用SSH客户端的内置文件管理功能。 5. **端口转发**:SSH的端口转发功能可以将本地端口的流量转发到远程服务器,实现对内网资源的...

    Java编写的用于批量管理Linux服务器的简易系统.zip

    标题中的“Java编写的用于批量管理Linux服务器的简易系统”是指一个使用Java编程语言开发的软件工具,专门设计用于高效地管理和维护多台Linux服务器。这个系统可能包含了自动化任务执行、远程命令执行、日志查看等...

    批量上传文件到Linux服务器

    在IT行业中,尤其是在系统管理或开发环境中,批量上传文件到Linux服务器是一项常见的任务。这通常涉及到将一组文件从本地计算机高效地传输到多台远程Linux服务器。为了实现这一目标,我们需要掌握一些关键技术和工具...

    shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止

    这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...

    linux-linux下多服务器自动连接管理工具

    在Linux中,`ssh`命令用于建立到远程服务器的连接,`scp`和`sftp`则分别用于安全地复制文件和进行文件传输。 二、多服务器管理工具 1. **Ansible**:Ansible是一款流行的自动化工具,不仅限于服务器连接,还能进行...

    ssh+lucene搜索实例

    它主要用于管理和操作远程服务器,特别是在Linux和Unix系统中。SSH框架在IT领域中广泛应用于自动化运维、脚本执行以及远程文件传输等场景。 Lucene是Apache软件基金会的一个开源全文检索库,它是Java编写的,提供了...

    基于linux下服务器与客户端传文件

    综上所述,"基于Linux下服务器与客户端传文件"这个主题涵盖了大量的网络通信、文件管理和系统安全知识。在实现这个小程序时,开发者需要熟悉上述知识点,并根据实际需求进行灵活应用。通过这样的练习,不仅可以提升...

    SSH文件的上传和下载

    在Linux或Unix系统中,我们通常使用`scp`(Secure Copy)和`sftp`(Secure File Transfer Protocol)命令来实现SSH文件传输。 1. **SCP(Secure Copy)**: SCP命令是基于SSH的文件复制工具,可以用于在本地和远程...

    ssh远程连接软件,windows下很好用的桌面连接软件

    - 自动化脚本:可以通过编写bash或PowerShell脚本来自动化SSH连接过程,例如批量管理多台服务器。 - 键盘映射:可以根据个人习惯自定义快捷键,提高工作效率。 - 会话管理:通过客户端软件的会话管理功能,可以...

    用于shell脚本无交互的ssh自动登陆(转载)

    在进行Linux系统管理或自动化任务部署时,经常需要使用SSH(Secure Shell)协议远程连接到其他服务器上执行命令或管理操作。出于安全考虑,SSH在连接远程主机时会要求输入密码,但在脚本自动化场景中,这种交互式...

    MobileSSH,黑莓上使用的SSH客户端工具

    MobileSSH是一款专为黑莓设备设计的SSH(Secure SHell)客户端工具,它允许用户通过安全的加密连接远程访问和管理运行Windows或Linux操作系统的服务器。SSH是一种网络协议,用于在不安全的网络环境中安全地执行命令...

    linux服务器命令用法笔记

    Linux服务器是许多企业和个人在进行网络服务、应用部署以及数据管理时首选的平台。它以其稳定、高效和开源的特点赢得了广大用户的青睐。本篇笔记主要针对Linux服务器中的常用命令及用法进行了详尽的总结,旨在帮助...

    Linux Network 用于发送 指令到服务器,服务器将结果发送到客户端输出.zip

    首先,我们需要了解Linux命令行工具,如`ssh`(Secure Shell)和`scp`(Secure Copy),它们是连接和管理远程服务器的主要工具。`ssh`用于建立安全的加密连接,允许用户在远程服务器上执行命令;而`scp`则用于在本地和...

    WinSCP3(SSH, SCP)

    WinSCP是一款功能强大的文件传输工具,它专门设计用于通过安全的SSH协议进行文件的上传、下载和管理。SSH(Secure Shell)是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他服务,如文件传输。FTP...

Global site tag (gtag.js) - Google Analytics