最近在系统中使用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工具,文件上传下载方便。可直接文件夹传输。
windows脚本自动归档、压缩文件,并通过sftp方式(公私钥身份验证)将文档上传至备份服务器(文档中包含详细步骤与脚本源码,本文档为原创文档)。
linux脚本sftp上传文件
使用Putty中的psftp工具实现bat脚本上传sftp文件,如果需要定时间,可自行使用Windows任务计划程序创建定时任务达到自动上传的效果
SSH和SFTP服务分离
vb.net SSH SFTP客户端源代码
详细的介绍了如何在Ubuntu系统下开启ssh以及sftp服务,以及实现ssh链接以及sftp文件传送的过程。
最近项目要求数据传必须使用sftp,但sftp又不能直接使用22端口,不安全,网上查询的ssh和sftp分离相关的资料都是基于centos7的,于是经过研究尝试,完成了基于centos6版本的服务分离
支持跨平台执行终端 通过SSH 执行跨平台执行终端 通过SFTP 执行远程上传或下载 文档
采用SFTP定时扫描本地文件,同时判断本地文件是否传输完成,如果传输完成,则向服务器开始上传本地文件,.bat启动,包含配置文件等,已通过公司测试
securcrt ssh工具客户端,支持ssh sftp 使用方便,支持从ssh里打开sftp方便文件传输
map linux root to windows drivers by ssh sftp
SSH SFTP FTP 工具,窗口化界面链接LINUX
本篇文章主要介绍了JAVA SFTP文件上传、下载及批量下载实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
由于项目开发需要使用到QSSh,但是网站上的资源很少,所以自己找了源码进行编译出了库文件进行使用,QSsh源码已编译含有库文件,可直接用于程序链接,需要QSsh开发不要错过哦
主要介绍了详解Java使用Jsch与sftp服务器实现ssh免密登录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
JSch - Java实现的SFTP(文件上传详解篇)
ssh与sftp分离脚本,分离后可单独控制sftp服务,独立与ssh服务,单独指定sftp端口,并进行限定目录等各类操作,脚本执行前请先查看readmefirst,可选项也在readme中,有需要下载,有问题留言
1 封装了ssh的上传下载功能及发命令功能 2 提供了测试例子及界面 3 qt pro工程,用creator或vsqt加载可一键使用 4 下载时,会多一个字节的问题,进行了处理。
jsch.jar java使用sftp实现上传下载文件 ,包含jar包 及 实现的工具类 ,供各位参考