最近在系统中使用jruby写业务逻辑,写完一个脚本之后,要手工地用ftp工具上传到服务器上面调试.见到大家都是ant自动部署,想起ruby下大名鼎鼎的rake,我想应该也是可以实现这样的功能的吧.参考网上使用ssh,sftp自动上传的文章,不过大都不可用,貌似是sftp的API已经变了,只好自己摸着石头过河,经过一个下午的努力(小弟是新手),终于搞定了,废话少说,上代码,我的第一个rake啊.
请先安装net-ssh,net-sftp这两个gem
gem install net-ssh net-sftp
# @anthor:yanghuan
# To change this template, choose Tools | Templates
# and open the template in the editor.
require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'rubygems'
require 'net/ssh'
require 'net/sftp'
LOCAL_PATH = 'lib'
REMOTE_PATH = '/home/scripts/test'
SERVER="192.168.0.1"
USER_NAME = "root"
PASSWORD = "password"
module FindUtils
def find_all_file(file,&block)
if File.stat(file).directory?
Dir.foreach(file) do |f|
find_all_file(file + "/" + f,&block) if( !(f =~ /^\./))
end
else
block.call(file)
end
end
def find_all_dir(dir,&block)
if File.stat(dir).directory?
block.call(dir)
Dir.foreach(dir) do |f|
find_all_dir(dir + "/" + f,&block) if(File.stat(dir + "/" + f).directory? && !(f =~ /^\./))
end
end
end
end
task :default => [:upload]
#文件上传
task :upload do
puts "task[upload] start"
include FindUtils
begin
Net::SSH.start(SERVER,USER_NAME,:password => PASSWORD) do |ssh|
ssh.sftp.connect do |sftp|
# 检查并创建文件夹
find_all_dir(LOCAL_PATH) do |d|
if !d.eql?(LOCAL_PATH)
begin
local_dir = d.sub(Regexp.new(LOCAL_PATH+"/"),'')
remote_dir = REMOTE_PATH + "/" + local_dir
puts "local_dir:#{local_dir} remote_dir:#{remote_dir}"
sftp.stat!(remote_dir)
rescue Net::SFTP::StatusException => se
raise unless se.code == 2
puts "mkdir on remote : #{remote_dir}"
sftp.mkdir!(remote_dir, :permissions => 0755)
puts "mkdir completion"
end
end
end
# 上传文件
find_all_file(LOCAL_PATH) do |f|
local_file = f.sub(Regexp.new(LOCAL_PATH+"/"),'')
remote_file = REMOTE_PATH + "/" + local_file
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
end
end
rescue => detail
puts "error:#{detail.backtrace.join("\n")} \n message:#{detail.message}"
end
end
分享到:
相关推荐
"SFTP上传下载文件工具"通常指的是支持SFTP协议的软件应用,这些应用使得用户能够方便地在本地计算机和远程服务器之间进行文件的上传和下载。描述中提到的"可直接文件夹传输"功能,意味着这款工具不仅支持单个文件的...
SFTP(Secure File Transfer Protocol)是一种基于 SSH 的文件传输协议,提供安全的文件传输服务。SFTP 不是一个独立的服务器程序,而是一个客户端程序,使用 SSHD 守护进程来完成连接操作。 二、分离 SSH 和 SFTP ...
总结来说,VB.NET SSH SFTP客户端源代码涉及的技术点包括:VB.NET编程语法、SSH和SFTP协议、第三方SSH库的使用、文件和目录操作以及错误处理策略。开发者可以通过学习和理解这些代码,实现自己的SSH SFTP客户端应用...
### Windows脚本SFTP上传文件至备份服务器方案 #### 概述 在当前的信息安全环境中,数据备份成为了保障业务连续性和数据安全的重要手段之一。传统的FTP传输方式由于其明文的身份验证机制,已经不能满足支付行业的...
### Ubuntu系统ssh安装与连接以及sftp文件传送全攻略 #### 一、SSH与SFTP基础知识 SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录。它可以在不安全的网络环境中提供安全的远程登录服务。SFTP...
可以使用SFTP客户端(如FileZilla、WinSCP等)进行文件的上传和下载,也可以通过命令行工具`sftp`进行交互式操作。 4. **密钥对认证**:SSH支持公钥/私钥对认证,这是一种比密码更安全的身份验证方式。用户可以在...
【标题】"SFTP定时扫描本地文件上传到Linux服务器"涉及的关键知识点主要集中在SFTP(Secure File Transfer Protocol)协议的使用、文件系统的监控以及自动化任务的执行。SFTP是一种安全的网络协议,用于在不同主机...
linux脚本sftp上传文件
QT实现SSH和SFTP是基于Qt框架的网络通信技术,主要应用于远程服务器的访问和文件传输。在本文中,我们将深入探讨如何使用QT库来实现SSH(Secure Shell)和SFTP(Secure File Transfer Protocol)功能,以及如何在...
3. **SftpDrive**:SftpDrive 是一款软件,它将 SFTP 功能集成到 Windows 文件系统中,让用户可以像使用本地驱动器一样访问远程文件系统。它创建了一个虚拟驱动器,用户可以直接在 Windows 资源管理器中访问和操作...
最近项目要求数据传必须使用sftp,但sftp又不能直接使用22端口,不安全,网上查询的ssh和sftp分离相关的资料都是基于centos7的,于是经过研究尝试,完成了基于centos6版本的服务分离
本教程将详细介绍如何通过编写bat脚本结合Putty工具中的psftp子程序实现SFTP(Secure File Transfer Protocol)文件上传,并且讲解如何利用Windows任务计划程序设置定时任务,从而实现自动化的文件传输。 首先,`...
JAVA SFTP文件上传、下载及批量下载实例 ...本篇文章主要介绍了JAVA SFTP文件上传、下载及批量下载的实例,包括JSch库的使用、SFTP的基本概念、代码实现等方面的内容。希望本篇文章能够为您提供一定的参考价值。
- **仅允许 SFTP 访问**:为了进一步提高安全性,可以设置用户只能使用 SFTP 进行文件传输,而不能使用 SSH 登录进行其他操作。 #### 三、使用 internal-sftp 配置 SFTP 服务 ##### 1. 创建 SFTP 组 首先,需要...
SSH2SFTP客户端提供了丰富的SFTP操作方法,如`put`用于上传文件,`get`用于下载文件,`rename`用于重命名文件,`mkdir`用于创建目录,`rmdir`用于删除目录,以及`ls`用于列出目录内容等。例如,上传本地文件到远程...
Go-sftp是一个基于Go语言实现的SSH文件传输协议(SFTP)库,它允许开发者在Go程序中通过安全的SSH连接进行文件的上传、下载和管理。SFTP是SSH的一个子系统,它提供了与FTP类似的功能,但具有更好的安全性,因为所有...
本文将详细介绍如何使用Renci.SshNet库在C#中实现SFTP文件的上传和下载。 首先,要使用Renci.SshNet,你需要引入相关的DLL文件。在提供的压缩包中,`SSH.NET-2016.1.0-bin.zip`包含了库的二进制文件,解压后找到`...
添加文件到SFTP服务器通常涉及到上传本地文件到远程目录,可以使用SftpClient的UploadFile方法: ```csharp using (FileStream fileStream = File.OpenRead("local_file_path")) { ssh.RunCommand("mkdir -p ...
这个“SftpDemo”可能包含了一个类似的示例代码,展示了如何使用SFTP上传文件。在实际应用中,你可能需要处理更复杂的情况,如错误处理、连接超时、证书验证等。 除此之外,还有一些其他的SFTP客户端工具,如WinSCP...
- 使用SFTP,可以浏览远程文件系统,进行文件的上传、下载、重命名、删除等操作。 - 支持拖放功能,用户可以直接将本地文件拖放到远程目录,或者反之。 6. 其他高级特性: - 宏功能:SecurCRT支持宏录制和回放,...