net-sftp 1.1.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +23 -0
- data/Manifest +55 -0
- data/README.rdoc +96 -0
- data/Rakefile +30 -0
- data/lib/net/sftp.rb +53 -38
- data/lib/net/sftp/constants.rb +187 -0
- data/lib/net/sftp/errors.rb +34 -20
- data/lib/net/sftp/operations/dir.rb +93 -0
- data/lib/net/sftp/operations/download.rb +364 -0
- data/lib/net/sftp/operations/file.rb +176 -0
- data/lib/net/sftp/operations/file_factory.rb +60 -0
- data/lib/net/sftp/operations/upload.rb +387 -0
- data/lib/net/sftp/packet.rb +21 -0
- data/lib/net/sftp/protocol.rb +32 -0
- data/lib/net/sftp/protocol/01/attributes.rb +265 -96
- data/lib/net/sftp/protocol/01/base.rb +268 -0
- data/lib/net/sftp/protocol/01/name.rb +43 -0
- data/lib/net/sftp/protocol/02/base.rb +31 -0
- data/lib/net/sftp/protocol/03/base.rb +35 -0
- data/lib/net/sftp/protocol/04/attributes.rb +120 -195
- data/lib/net/sftp/protocol/04/base.rb +94 -0
- data/lib/net/sftp/protocol/04/name.rb +67 -0
- data/lib/net/sftp/protocol/05/base.rb +66 -0
- data/lib/net/sftp/protocol/06/attributes.rb +107 -0
- data/lib/net/sftp/protocol/06/base.rb +63 -0
- data/lib/net/sftp/protocol/base.rb +50 -0
- data/lib/net/sftp/request.rb +91 -0
- data/lib/net/sftp/response.rb +76 -0
- data/lib/net/sftp/session.rb +914 -238
- data/lib/net/sftp/version.rb +14 -21
- data/net-sftp.gemspec +60 -0
- data/setup.rb +1331 -0
- data/test/common.rb +173 -0
- data/test/protocol/01/test_attributes.rb +97 -0
- data/test/protocol/01/test_base.rb +210 -0
- data/test/protocol/01/test_name.rb +27 -0
- data/test/protocol/02/test_base.rb +26 -0
- data/test/protocol/03/test_base.rb +27 -0
- data/test/protocol/04/test_attributes.rb +148 -0
- data/test/protocol/04/test_base.rb +74 -0
- data/test/protocol/04/test_name.rb +49 -0
- data/test/protocol/05/test_base.rb +62 -0
- data/test/protocol/06/test_attributes.rb +124 -0
- data/test/protocol/06/test_base.rb +51 -0
- data/test/protocol/test_base.rb +42 -0
- data/test/test_all.rb +3 -0
- data/test/test_dir.rb +47 -0
- data/test/test_download.rb +252 -0
- data/test/test_file.rb +159 -0
- data/test/test_file_factory.rb +48 -0
- data/test/test_packet.rb +9 -0
- data/test/test_protocol.rb +17 -0
- data/test/test_request.rb +71 -0
- data/test/test_response.rb +53 -0
- data/test/test_session.rb +741 -0
- data/test/test_upload.rb +219 -0
- metadata +59 -111
- data/doc/LICENSE-BSD +0 -27
- data/doc/LICENSE-GPL +0 -280
- data/doc/LICENSE-RUBY +0 -56
- data/doc/faq/faq.html +0 -298
- data/doc/faq/faq.rb +0 -154
- data/doc/faq/faq.yml +0 -183
- data/examples/asynchronous.rb +0 -57
- data/examples/get-put.rb +0 -45
- data/examples/sftp-open-uri.rb +0 -30
- data/examples/ssh-service.rb +0 -30
- data/examples/synchronous.rb +0 -131
- data/lib/net/sftp/operations/abstract.rb +0 -108
- data/lib/net/sftp/operations/close.rb +0 -31
- data/lib/net/sftp/operations/errors.rb +0 -76
- data/lib/net/sftp/operations/fsetstat.rb +0 -36
- data/lib/net/sftp/operations/fstat.rb +0 -32
- data/lib/net/sftp/operations/lstat.rb +0 -31
- data/lib/net/sftp/operations/mkdir.rb +0 -33
- data/lib/net/sftp/operations/open.rb +0 -32
- data/lib/net/sftp/operations/opendir.rb +0 -32
- data/lib/net/sftp/operations/read.rb +0 -88
- data/lib/net/sftp/operations/readdir.rb +0 -55
- data/lib/net/sftp/operations/realpath.rb +0 -37
- data/lib/net/sftp/operations/remove.rb +0 -31
- data/lib/net/sftp/operations/rename.rb +0 -32
- data/lib/net/sftp/operations/rmdir.rb +0 -31
- data/lib/net/sftp/operations/services.rb +0 -42
- data/lib/net/sftp/operations/setstat.rb +0 -33
- data/lib/net/sftp/operations/stat.rb +0 -31
- data/lib/net/sftp/operations/write.rb +0 -63
- data/lib/net/sftp/protocol/01/impl.rb +0 -251
- data/lib/net/sftp/protocol/01/packet-assistant.rb +0 -82
- data/lib/net/sftp/protocol/01/services.rb +0 -47
- data/lib/net/sftp/protocol/02/impl.rb +0 -39
- data/lib/net/sftp/protocol/02/packet-assistant.rb +0 -32
- data/lib/net/sftp/protocol/02/services.rb +0 -44
- data/lib/net/sftp/protocol/03/impl.rb +0 -42
- data/lib/net/sftp/protocol/03/packet-assistant.rb +0 -35
- data/lib/net/sftp/protocol/03/services.rb +0 -44
- data/lib/net/sftp/protocol/04/impl.rb +0 -86
- data/lib/net/sftp/protocol/04/packet-assistant.rb +0 -45
- data/lib/net/sftp/protocol/04/services.rb +0 -44
- data/lib/net/sftp/protocol/05/impl.rb +0 -90
- data/lib/net/sftp/protocol/05/packet-assistant.rb +0 -34
- data/lib/net/sftp/protocol/05/services.rb +0 -44
- data/lib/net/sftp/protocol/constants.rb +0 -60
- data/lib/net/sftp/protocol/driver.rb +0 -235
- data/lib/net/sftp/protocol/packet-assistant.rb +0 -84
- data/lib/net/sftp/protocol/services.rb +0 -55
- data/lib/uri/open-sftp.rb +0 -54
- data/lib/uri/sftp.rb +0 -42
- data/test/ALL-TESTS.rb +0 -23
- data/test/operations/tc_abstract.rb +0 -124
- data/test/operations/tc_close.rb +0 -40
- data/test/operations/tc_fsetstat.rb +0 -48
- data/test/operations/tc_fstat.rb +0 -40
- data/test/operations/tc_lstat.rb +0 -40
- data/test/operations/tc_mkdir.rb +0 -48
- data/test/operations/tc_open.rb +0 -42
- data/test/operations/tc_opendir.rb +0 -40
- data/test/operations/tc_read.rb +0 -103
- data/test/operations/tc_readdir.rb +0 -88
- data/test/operations/tc_realpath.rb +0 -54
- data/test/operations/tc_remove.rb +0 -40
- data/test/operations/tc_rmdir.rb +0 -40
- data/test/operations/tc_setstat.rb +0 -48
- data/test/operations/tc_stat.rb +0 -40
- data/test/operations/tc_write.rb +0 -91
- data/test/protocol/01/tc_attributes.rb +0 -138
- data/test/protocol/01/tc_impl.rb +0 -294
- data/test/protocol/01/tc_packet_assistant.rb +0 -81
- data/test/protocol/02/tc_impl.rb +0 -41
- data/test/protocol/02/tc_packet_assistant.rb +0 -31
- data/test/protocol/03/tc_impl.rb +0 -48
- data/test/protocol/03/tc_packet_assistant.rb +0 -34
- data/test/protocol/04/tc_attributes.rb +0 -174
- data/test/protocol/04/tc_impl.rb +0 -91
- data/test/protocol/04/tc_packet_assistant.rb +0 -38
- data/test/protocol/05/tc_impl.rb +0 -61
- data/test/protocol/05/tc_packet_assistant.rb +0 -32
- data/test/protocol/tc_driver.rb +0 -219
data/doc/faq/faq.rb
DELETED
@@ -1,154 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2005, Jamis Buck (jamis@jamisbuck.org)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# Redistribution and use in source and binary forms, with or without
|
7
|
-
# modification, are permitted provided that the following conditions are met:
|
8
|
-
#
|
9
|
-
# * Redistributions of source code must retain the above copyright notice,
|
10
|
-
# this list of conditions and the following disclaimer.
|
11
|
-
#
|
12
|
-
# * Redistributions in binary form must reproduce the above copyright
|
13
|
-
# notice, this list of conditions and the following disclaimer in the
|
14
|
-
# documentation and/or other materials provided with the distribution.
|
15
|
-
#
|
16
|
-
# * The names of its contributors may not be used to endorse or promote
|
17
|
-
# products derived from this software without specific prior written
|
18
|
-
# permission.
|
19
|
-
#
|
20
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
23
|
-
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
24
|
-
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
25
|
-
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
26
|
-
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
27
|
-
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
28
|
-
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
-
# =============================================================================
|
31
|
-
#++
|
32
|
-
|
33
|
-
require 'yaml'
|
34
|
-
require 'redcloth'
|
35
|
-
|
36
|
-
def process_faq_list( faqs )
|
37
|
-
puts "<ul>"
|
38
|
-
faqs.each do |faq|
|
39
|
-
process_faq_list_item faq
|
40
|
-
end
|
41
|
-
puts "</ul>"
|
42
|
-
end
|
43
|
-
|
44
|
-
def process_faq_list_item( faq )
|
45
|
-
question = faq.keys.first
|
46
|
-
answer = faq.values.first
|
47
|
-
|
48
|
-
print "<li>"
|
49
|
-
|
50
|
-
question_text = RedCloth.new(question).to_html.gsub( %r{</?p>},"" )
|
51
|
-
if answer.is_a?( Array )
|
52
|
-
puts question_text
|
53
|
-
process_faq_list answer
|
54
|
-
else
|
55
|
-
print "<a href='##{question.object_id}'>#{question_text}</a>"
|
56
|
-
end
|
57
|
-
|
58
|
-
puts "</li>"
|
59
|
-
end
|
60
|
-
|
61
|
-
def process_faq_descriptions( faqs, path=nil )
|
62
|
-
faqs.each do |faq|
|
63
|
-
process_faq_description faq, path
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def process_faq_description( faq, path )
|
68
|
-
question = faq.keys.first
|
69
|
-
path = ( path ? path + " " : "" ) + question
|
70
|
-
answer = faq.values.first
|
71
|
-
|
72
|
-
if answer.is_a?( Array )
|
73
|
-
process_faq_descriptions( answer, path )
|
74
|
-
else
|
75
|
-
title = RedCloth.new( path ).to_html.gsub( %r{</?p>}, "" )
|
76
|
-
answer = RedCloth.new( answer || "" )
|
77
|
-
|
78
|
-
puts "<a name='#{question.object_id}'></a>"
|
79
|
-
puts "<div class='faq-title'>#{title}</div>"
|
80
|
-
puts "<div class='faq-answer'>#{answer.to_html}</div>"
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
faqs = YAML.load( File.read( "faq.yml" ) )
|
85
|
-
|
86
|
-
puts <<-EOF
|
87
|
-
<html>
|
88
|
-
<head>
|
89
|
-
<title>Net::SFTP FAQ</title>
|
90
|
-
<style type="text/css">
|
91
|
-
a, a:visited, a:active {
|
92
|
-
color: #00F;
|
93
|
-
text-decoration: none;
|
94
|
-
}
|
95
|
-
|
96
|
-
a:hover {
|
97
|
-
text-decoration: underline;
|
98
|
-
}
|
99
|
-
|
100
|
-
.faq-list {
|
101
|
-
color: #000;
|
102
|
-
font-family: vera-sans, verdana, arial, sans-serif;
|
103
|
-
}
|
104
|
-
|
105
|
-
.faq-title {
|
106
|
-
background: #007;
|
107
|
-
color: #FFF;
|
108
|
-
font-family: vera-sans, verdana, arial, sans-serif;
|
109
|
-
padding-left: 1em;
|
110
|
-
padding-top: 0.5em;
|
111
|
-
padding-bottom: 0.5em;
|
112
|
-
font-weight: bold;
|
113
|
-
font-size: large;
|
114
|
-
border: 1px solid #000;
|
115
|
-
}
|
116
|
-
|
117
|
-
.faq-answer {
|
118
|
-
margin-left: 1em;
|
119
|
-
color: #000;
|
120
|
-
font-family: vera-sans, verdana, arial, sans-serif;
|
121
|
-
}
|
122
|
-
|
123
|
-
.faq-answer pre {
|
124
|
-
margin-left: 1em;
|
125
|
-
color: #000;
|
126
|
-
background: #FFE;
|
127
|
-
font-size: normal;
|
128
|
-
border: 1px dotted #CCC;
|
129
|
-
padding: 1em;
|
130
|
-
}
|
131
|
-
|
132
|
-
h1 {
|
133
|
-
background: #005;
|
134
|
-
color: #FFF;
|
135
|
-
font-family: vera-sans, verdana, arial, sans-serif;
|
136
|
-
padding-left: 1em;
|
137
|
-
padding-top: 1em;
|
138
|
-
padding-bottom: 1em;
|
139
|
-
font-weight: bold;
|
140
|
-
font-size: x-large;
|
141
|
-
border: 1px solid #00F;
|
142
|
-
}
|
143
|
-
</style>
|
144
|
-
</head>
|
145
|
-
<body>
|
146
|
-
<h1>Net::SFTP FAQ</h1>
|
147
|
-
<div class="faq-list">
|
148
|
-
EOF
|
149
|
-
|
150
|
-
process_faq_list( faqs )
|
151
|
-
puts "</div>"
|
152
|
-
process_faq_descriptions( faqs )
|
153
|
-
|
154
|
-
puts "</body></html>"
|
data/doc/faq/faq.yml
DELETED
@@ -1,183 +0,0 @@
|
|
1
|
-
---
|
2
|
-
- "What is Net::SFTP?": |
|
3
|
-
Net::SFTP is a pure-Ruby implementation of the SFTP protocol. That's
|
4
|
-
"SFTP" as in "Secure File Transfer Protocol", as defined as an adjuct to the
|
5
|
-
SSH specification. _Not_ "SFTP" as in "Secure FTP" (a _completely_ different
|
6
|
-
beast). Nor is it an implementation of the "Simple File Transfer Protocol"
|
7
|
-
(which is in no way secure).
|
8
|
-
|
9
|
-
- "How do I...":
|
10
|
-
- "...connect to an SFTP server?":
|
11
|
-
- "I'd like to connect without first getting a Net::SSH connection...": |
|
12
|
-
Something like this:
|
13
|
-
|
14
|
-
<code><pre>
|
15
|
-
require 'net/sftp'
|
16
|
-
|
17
|
-
Net::SFTP.start(host, user, password) do |sftp|
|
18
|
-
...
|
19
|
-
end
|
20
|
-
</pre></code>
|
21
|
-
|
22
|
-
@Net::SFTP.start@ accepts the same parameters as @Net::SSH.start@,
|
23
|
-
so I'll direct you to that documentation for all the particulars.
|
24
|
-
|
25
|
-
- "I already have an open Net::SSH connection...": |
|
26
|
-
You can piggy-back an SFTP connection on an existing Net::SSH
|
27
|
-
connection, which can be useful if you've already got an SSH
|
28
|
-
connection that you're using for port forwarding or whatever.
|
29
|
-
|
30
|
-
<code><pre>
|
31
|
-
require 'net/ssh'
|
32
|
-
require 'net/sftp'
|
33
|
-
|
34
|
-
Net::SSH.start(host, user, password) do |ssh|
|
35
|
-
...
|
36
|
-
ssh.sftp.connect do |sftp|
|
37
|
-
...
|
38
|
-
end
|
39
|
-
...
|
40
|
-
end
|
41
|
-
</pre></code>
|
42
|
-
|
43
|
-
- "...upload data?":
|
44
|
-
- "I want to upload an entire file on disk...": |
|
45
|
-
Assuming you already have an SFTP connection:
|
46
|
-
|
47
|
-
<code><pre>
|
48
|
-
sftp.put_file "/path/to/local.file", "/path/to/remote.file"
|
49
|
-
</pre></code>
|
50
|
-
|
51
|
-
- "I want to upload bytes from a string or other object...": |
|
52
|
-
Assuming you already have an SFTP connection, and your data is stored
|
53
|
-
in a string named @data@:
|
54
|
-
|
55
|
-
<code><pre>
|
56
|
-
sftp.open_handle("/path/to/remote.file", "w") do |handle|
|
57
|
-
result = sftp.write(handle, data)
|
58
|
-
puts result.code # the result of the operation
|
59
|
-
end
|
60
|
-
</pre></code>
|
61
|
-
|
62
|
-
If (for whatever reason) you'd rather not use blocks, you can do
|
63
|
-
without, but be sure to call @close_handle@ when you're done:
|
64
|
-
|
65
|
-
<code><pre>
|
66
|
-
handle = sftp.open_handle("/path/to/remote.file", "w")
|
67
|
-
result = sftp.write(handle, data)
|
68
|
-
puts result.code # the result of the operation
|
69
|
-
sftp.close_handle(handle)
|
70
|
-
</pre></code>
|
71
|
-
|
72
|
-
- "...download data?":
|
73
|
-
- "I want to download directly to a local file...": |
|
74
|
-
Assuming you already have an SFTP connection:
|
75
|
-
|
76
|
-
<code><pre>
|
77
|
-
sftp.get_file "/path/to/remote.file", "/path/to/local.file"
|
78
|
-
</pre></code>
|
79
|
-
|
80
|
-
- "I want to download to a string in memory...": |
|
81
|
-
Assuming you already have an SFTP connection:
|
82
|
-
|
83
|
-
<code><pre>
|
84
|
-
data = nil
|
85
|
-
sftp.open_handle("/path/to/remote.file") do |handle|
|
86
|
-
data = sftp.read(handle)
|
87
|
-
end
|
88
|
-
</pre></code>
|
89
|
-
|
90
|
-
- "I want to be notified of the progress of the download...": |
|
91
|
-
You can specify both a "chunk size" and a "progress callback". The
|
92
|
-
callback will be invoked for every "chunk size" bytes that are
|
93
|
-
received:
|
94
|
-
|
95
|
-
<code><pre>
|
96
|
-
sftp.open_handle("/path/to/remote.file") do |handle|
|
97
|
-
begin
|
98
|
-
STDOUT.sync = true
|
99
|
-
data = sftp.read(handle, :chunk_size => 4096,
|
100
|
-
:progress_callback => lambda { |data| print "." })
|
101
|
-
puts
|
102
|
-
ensure
|
103
|
-
STDOUT.sync = false
|
104
|
-
end
|
105
|
-
end
|
106
|
-
</pre></code>
|
107
|
-
|
108
|
-
- "...manage file permissions?":
|
109
|
-
- "I want to query a file's permissions...": |
|
110
|
-
File permissions are one of the @stat@ attributes of files and
|
111
|
-
directories:
|
112
|
-
|
113
|
-
<code><pre>
|
114
|
-
p sftp.stat("/path/to/remote.file").permissions
|
115
|
-
</pre></code>
|
116
|
-
|
117
|
-
- "I want to change a file's permissions...": |
|
118
|
-
Just use @setstat@ to change the permissions of an existing file:
|
119
|
-
|
120
|
-
<code><pre>
|
121
|
-
sftp.setstat("/path/to/remote.file", :permissions => 0644)
|
122
|
-
</pre></code>
|
123
|
-
|
124
|
-
- "I already have an open handle for the remote file...": |
|
125
|
-
If you have a handle for the remote file, you can use @fstat@ and
|
126
|
-
@fsetstat@ to query and set the permissions:
|
127
|
-
|
128
|
-
<code><pre>
|
129
|
-
sftp.open_handle("/path/to/remote.file") do |handle|
|
130
|
-
permissions = sftp.fstat(handle)
|
131
|
-
sftp.fsetstat(handle, :permissions => permissions | 0444)
|
132
|
-
end
|
133
|
-
</pre></code>
|
134
|
-
|
135
|
-
- "...manage directories?":
|
136
|
-
- "I want to query the contents of a directory...": |
|
137
|
-
You query the contents of a directory by calling @opendir@ to obtain
|
138
|
-
a handle to the directory, and then using @readdir@ on the handle to
|
139
|
-
obtain a list of directory entries. Be sure to close the handle when
|
140
|
-
you're done:
|
141
|
-
|
142
|
-
<code><pre>
|
143
|
-
handle = sftp.opendir("/usr/lib")
|
144
|
-
items = sftp.readdir(handle)
|
145
|
-
items.each do |item|
|
146
|
-
puts item.filename
|
147
|
-
puts item.longname
|
148
|
-
p item.attributes # permissions, atime, etc.
|
149
|
-
end
|
150
|
-
sftp.close_handle(handle)
|
151
|
-
</pre></code>
|
152
|
-
|
153
|
-
- "I want to create a directory...": |
|
154
|
-
Use @mkdir@:
|
155
|
-
|
156
|
-
<code><pre>
|
157
|
-
sftp.mkdir("/path/to/remote/dir", :permissions => 0500)
|
158
|
-
</pre></code>
|
159
|
-
|
160
|
-
- "I want to remove a directory...": |
|
161
|
-
Use @rmdir@:
|
162
|
-
|
163
|
-
<code><pre>
|
164
|
-
sftp.rmdir("/path/to/remote/dir")
|
165
|
-
</pre></code>
|
166
|
-
|
167
|
-
- "...delete a file?": |
|
168
|
-
Use @remove@:
|
169
|
-
|
170
|
-
<code><pre>
|
171
|
-
sftp.remove("/path/to/remote.file")
|
172
|
-
</pre></code>
|
173
|
-
|
174
|
-
- "...rename a file?": |
|
175
|
-
Use @rename@:
|
176
|
-
|
177
|
-
<code><pre>
|
178
|
-
sftp.rename("/path/to/remote.file", "/path/to/new.file")
|
179
|
-
</pre></code>
|
180
|
-
|
181
|
-
It should be noted that @rename@ is only supported by version 2 or
|
182
|
-
later of the SFTP protocol, so if you're using an older SFTP server you
|
183
|
-
might not be able to use this operation.
|
data/examples/asynchronous.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
-
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "../lib"
|
18
|
-
require 'net/sftp'
|
19
|
-
|
20
|
-
Net::SFTP.start( 'localhost',
|
21
|
-
:registry_options => { :logs => { :levels => { "sftp.*" => :debug } } }
|
22
|
-
) do |sftp|
|
23
|
-
closed = 0
|
24
|
-
|
25
|
-
size = sftp.stat( "temp/out" ).size
|
26
|
-
|
27
|
-
# setting this to a higher value typically causes problems...looks like it
|
28
|
-
# might be a problem with OpenSSH, but I'm not sure.
|
29
|
-
parts = 5
|
30
|
-
|
31
|
-
chunk_size = size / parts
|
32
|
-
chunks = []
|
33
|
-
|
34
|
-
# Set up 'parts' read operations, each one pulling from a different segment
|
35
|
-
# of the file. Each of these will be run in parallel.
|
36
|
-
parts.times do |part|
|
37
|
-
sftp.open( "temp/out" ) do |s,h|
|
38
|
-
puts "----------------------------------------------"
|
39
|
-
puts "got handle ##{part+1} (#{h.inspect})"
|
40
|
-
sftp.read( h, chunk_size*part, chunk_size ) do |s,data|
|
41
|
-
puts "----------------------------------------------"
|
42
|
-
puts "got data ##{part+1} (#{data.length} bytes)"
|
43
|
-
chunks[part] = data
|
44
|
-
sftp.close_handle( h ) do
|
45
|
-
closed += 1
|
46
|
-
sftp.close_channel if closed == parts
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
sftp.loop
|
53
|
-
|
54
|
-
puts "----------------------------------------------"
|
55
|
-
data = chunks.join
|
56
|
-
puts "done! (#{data.length} bytes)"
|
57
|
-
end
|
data/examples/get-put.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
-
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "../lib"
|
18
|
-
require 'net/sftp'
|
19
|
-
|
20
|
-
Net::SFTP.start( 'localhost',
|
21
|
-
:registry_options => { :logs => { :levels => { "sftp.*" => :debug } } }
|
22
|
-
) do |sftp|
|
23
|
-
File.open( "test.data", "w" ) { |f| f.write "012345789"*10000 }
|
24
|
-
|
25
|
-
puts "putting local file to remote location..."
|
26
|
-
sftp.put_file "test.data", "temp/blah.data"
|
27
|
-
|
28
|
-
puts "getting remote file to local location..."
|
29
|
-
sftp.get_file "temp/blah.data", "new.data"
|
30
|
-
|
31
|
-
sftp.remove "temp/blah.data"
|
32
|
-
|
33
|
-
if !File.exist? "new.data"
|
34
|
-
warn "----\n" +
|
35
|
-
"something went wrong---'new.data' was apparently not created..." +
|
36
|
-
"----\n"
|
37
|
-
else
|
38
|
-
File.delete "new.data"
|
39
|
-
end
|
40
|
-
|
41
|
-
File.delete "test.data"
|
42
|
-
|
43
|
-
puts "----------------------------------------------"
|
44
|
-
puts "done!"
|
45
|
-
end
|
data/examples/sftp-open-uri.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
-
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "../lib"
|
18
|
-
require 'uri/open-sftp'
|
19
|
-
|
20
|
-
uri = URI.parse( "sftp://localhost" +
|
21
|
-
"/home/jgb3/temp/out" +
|
22
|
-
"?encryption=blowfish-cbc&compression=zlib" )
|
23
|
-
|
24
|
-
data = uri.open.read
|
25
|
-
p data.length
|
26
|
-
|
27
|
-
stream = uri.open( :chunk_size=>128,
|
28
|
-
:progress_proc => proc { |d| print "."; $stdout.flush } )
|
29
|
-
puts
|
30
|
-
p stream.read.length
|