- 浏览: 148978 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (110)
- CoreJava (18)
- 待解决 (1)
- 数据结构 (3)
- 科普 (2)
- 网站 (1)
- DataBase (8)
- Access (1)
- Asp (1)
- JSP (1)
- 操作系统 (8)
- Tech (1)
- Linux (11)
- Career (5)
- MongoDB (1)
- Embedded (1)
- JavaScript (1)
- UltraIso (1)
- Linux命令 (1)
- DesignPattern (1)
- Ruby (13)
- Vim (1)
- 自考 (2)
- Github (5)
- zrProject (1)
- Emacs (4)
- Math (3)
- Ajax (1)
- 没看懂 (1)
- HTML (1)
- Philosophy (1)
- 软件 (1)
- 面试 (1)
- 考试报名 (3)
- Regex (1)
- 日语 (1)
- 生活 (1)
最新评论
原文: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
发表评论
-
Ruby的 private protect public
2012-06-14 19:18 1345原文:http://rubyer.me/bl ... -
ruby-mp3info,纯Ruby修改mp3标签
2012-06-14 19:16 907原文:http://rubyer.me/blog/747 ... -
Ruby Closure
2012-06-14 19:13 795Closure - programming language ... -
Ruby/Rails 生態圈 Ecosystem
2012-06-13 21:59 853http://ihower.tw/rails3/eco ... -
提高rails new时bundle install运行速度
2012-05-05 20:24 0http://rubyer.me/blog/941/ ... -
mysql配置
2012-03-20 22:36 882http://wiisola.iteye.com/blo ... -
Gem 淘宝mirror地址
2012-03-19 12:47 925https://ruby.taobao.org -
搭建 Nginx 反向代理,提高 Gem 的安装速度
2012-03-19 12:43 800最近时常遇到 Gem 安装东西的时候安装失败或异常缓慢, ... -
细说Ruby工程的Bundle以及如何加快bundle install
2012-03-19 12:33 726做过Ruby项目的人可能有过我一样的感受,rubygem ... -
Gems淘宝镜像
2012-03-04 23:09 0Shell代码 $ ... -
学习笔记
2012-03-04 11:55 562Command LIne Switches: -
Ruby待解决
2012-02-21 21:47 6091.inject 2.|x|这种用法 -
Tutor
2012-02-19 16:14 510http://www.fincher.org/tips/Lan ... -
Tutorial
2012-02-19 12:46 678Variable naming Ok, let's slo ...
相关推荐
总的来说,Linux批量scp命令执行工具是Linux服务器管理员的得力助手,它简化了多主机文件传输的过程,提高了工作效率,同时也降低了出错的可能性。对于那些管理着众多Linux服务器的人来说,掌握并合理运用这样的工具...
要从一台服务器A向另一台服务器B和C发送文件,我们可以编写一个脚本,如压缩包中的`System_Ssh_scp.sh`。这个脚本将包含一系列SCP命令,每个命令对应一个目标服务器。在执行脚本时,确保已经正确配置了SSH密钥对以...
在Linux和Unix-like操作系统中,SSH脚本通常使用Shell脚本语言编写,如Bash。 首先,了解SSH的基本概念至关重要。SSH提供了加密的网络通信,包括命令行接口的会话、文件传输(如scp和sftp)以及自动化任务。它的...
用python 实现ssh的执行远端命令和scp的不同机器文件传输功能。代码简练易懂。
SSH脚本是利用SSH协议实现自动化任务的一种方式,尤其适用于系统管理员进行批量操作、远程管理服务器或者执行定期维护任务。 在"SSH脚本文件.zip"中,我们有一个名为"ssh脚本文件"的压缩包,其中很可能包含了用于...
4. **文件传输**:了解如何使用`scp`或`sftp`命令进行文件和目录的上传与下载,或者利用SSH客户端的内置文件管理功能。 5. **端口转发**:SSH的端口转发功能可以将本地端口的流量转发到远程服务器,实现对内网资源的...
标题中的“Java编写的用于批量管理Linux服务器的简易系统”是指一个使用Java编程语言开发的软件工具,专门设计用于高效地管理和维护多台Linux服务器。这个系统可能包含了自动化任务执行、远程命令执行、日志查看等...
在IT行业中,尤其是在系统管理或开发环境中,批量上传文件到Linux服务器是一项常见的任务。这通常涉及到将一组文件从本地计算机高效地传输到多台远程Linux服务器。为了实现这一目标,我们需要掌握一些关键技术和工具...
这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...
在Linux中,`ssh`命令用于建立到远程服务器的连接,`scp`和`sftp`则分别用于安全地复制文件和进行文件传输。 二、多服务器管理工具 1. **Ansible**:Ansible是一款流行的自动化工具,不仅限于服务器连接,还能进行...
它主要用于管理和操作远程服务器,特别是在Linux和Unix系统中。SSH框架在IT领域中广泛应用于自动化运维、脚本执行以及远程文件传输等场景。 Lucene是Apache软件基金会的一个开源全文检索库,它是Java编写的,提供了...
综上所述,"基于Linux下服务器与客户端传文件"这个主题涵盖了大量的网络通信、文件管理和系统安全知识。在实现这个小程序时,开发者需要熟悉上述知识点,并根据实际需求进行灵活应用。通过这样的练习,不仅可以提升...
在Linux或Unix系统中,我们通常使用`scp`(Secure Copy)和`sftp`(Secure File Transfer Protocol)命令来实现SSH文件传输。 1. **SCP(Secure Copy)**: SCP命令是基于SSH的文件复制工具,可以用于在本地和远程...
- 自动化脚本:可以通过编写bash或PowerShell脚本来自动化SSH连接过程,例如批量管理多台服务器。 - 键盘映射:可以根据个人习惯自定义快捷键,提高工作效率。 - 会话管理:通过客户端软件的会话管理功能,可以...
在进行Linux系统管理或自动化任务部署时,经常需要使用SSH(Secure Shell)协议远程连接到其他服务器上执行命令或管理操作。出于安全考虑,SSH在连接远程主机时会要求输入密码,但在脚本自动化场景中,这种交互式...
MobileSSH是一款专为黑莓设备设计的SSH(Secure SHell)客户端工具,它允许用户通过安全的加密连接远程访问和管理运行Windows或Linux操作系统的服务器。SSH是一种网络协议,用于在不安全的网络环境中安全地执行命令...
Linux服务器是许多企业和个人在进行网络服务、应用部署以及数据管理时首选的平台。它以其稳定、高效和开源的特点赢得了广大用户的青睐。本篇笔记主要针对Linux服务器中的常用命令及用法进行了详尽的总结,旨在帮助...
首先,我们需要了解Linux命令行工具,如`ssh`(Secure Shell)和`scp`(Secure Copy),它们是连接和管理远程服务器的主要工具。`ssh`用于建立安全的加密连接,允许用户在远程服务器上执行命令;而`scp`则用于在本地和...
WinSCP是一款功能强大的文件传输工具,它专门设计用于通过安全的SSH协议进行文件的上传、下载和管理。SSH(Secure Shell)是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他服务,如文件传输。FTP...