net-ssh 3.3.0.beta1 → 4.0.0.alpha1
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.travis.yml +2 -1
- data/CHANGES.txt +3 -16
- data/Gemfile +17 -0
- data/README.rdoc +1 -1
- data/Rakefile +16 -9
- data/lib/net/ssh.rb +1 -5
- data/lib/net/ssh/authentication/agent/java_pageant.rb +1 -1
- data/lib/net/ssh/authentication/agent/socket.rb +5 -5
- data/lib/net/ssh/authentication/ed25519.rb +140 -0
- data/lib/net/ssh/authentication/key_manager.rb +2 -2
- data/lib/net/ssh/authentication/pageant.rb +1 -1
- data/lib/net/ssh/buffer.rb +5 -23
- data/lib/net/ssh/connection/session.rb +3 -20
- data/lib/net/ssh/key_factory.rb +14 -4
- data/lib/net/ssh/proxy/http.rb +2 -2
- data/lib/net/ssh/service/forward.rb +1 -1
- data/lib/net/ssh/test/socket.rb +1 -1
- data/lib/net/ssh/transport/algorithms.rb +2 -16
- data/lib/net/ssh/transport/cipher_factory.rb +16 -22
- data/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb +1 -1
- data/lib/net/ssh/transport/key_expander.rb +1 -0
- data/lib/net/ssh/transport/openssl.rb +1 -1
- data/lib/net/ssh/transport/session.rb +0 -1
- data/lib/net/ssh/version.rb +3 -3
- data/net-ssh.gemspec +28 -9
- data/test/authentication/test_agent.rb +1 -9
- data/test/authentication/test_ed25519.rb +77 -0
- data/test/common.rb +0 -16
- data/test/connection/test_channel.rb +3 -3
- data/test/connection/test_session.rb +0 -1
- data/test/integration/{README.txt → README.md} +2 -1
- data/test/integration/common.rb +8 -6
- data/test/integration/playbook.yml +8 -7
- data/test/integration/test_ed25519_pkeys.rb +70 -0
- data/test/integration/test_forward.rb +15 -120
- data/test/integration/test_id_rsa_keys.rb +11 -11
- data/test/integration/test_proxy.rb +2 -2
- data/test/test_buffer.rb +1 -29
- data/test/transport/kex/test_ecdh_sha2_nistp384.rb +1 -1
- data/test/transport/test_algorithms.rb +6 -6
- data/test/transport/test_cipher_factory.rb +0 -119
- data/test/transport/test_packet_stream.rb +0 -576
- data/test/transport/test_session.rb +1 -1
- metadata +79 -6
- metadata.gz.sig +0 -0
- data/test/integration/test_encoding.rb +0 -23
data/test/common.rb
CHANGED
@@ -15,18 +15,6 @@ require 'ostruct'
|
|
15
15
|
$original_config_default_files = Net::SSH::Config.default_files.dup
|
16
16
|
Net::SSH::Config.default_files.clear
|
17
17
|
|
18
|
-
def with_restored_default_files(&block)
|
19
|
-
act_default_files = Net::SSH::Config.default_files.dup
|
20
|
-
begin
|
21
|
-
Net::SSH::Config.default_files.clear
|
22
|
-
Net::SSH::Config.default_files.concat($_original_config_default_files) # rubocop:disable Style/GlobalVars
|
23
|
-
yield
|
24
|
-
ensure
|
25
|
-
Net::SSH::Config.default_files.clear
|
26
|
-
Net::SSH::Config.default_files.concat(act_default_files)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
18
|
def P(*args)
|
31
19
|
Net::SSH::Packet.new(Net::SSH::Buffer.from(*args))
|
32
20
|
end
|
@@ -83,10 +71,6 @@ class MockTransport < Net::SSH::Transport::Session
|
|
83
71
|
end
|
84
72
|
end
|
85
73
|
|
86
|
-
def closed?
|
87
|
-
false
|
88
|
-
end
|
89
|
-
|
90
74
|
def poll_message
|
91
75
|
@queue.shift
|
92
76
|
end
|
@@ -429,14 +429,14 @@ module Connection
|
|
429
429
|
|
430
430
|
def test_data_should_precede_eof
|
431
431
|
channel.do_open_confirmation(0, 1000, 1000)
|
432
|
-
connection.expect do |
|
432
|
+
connection.expect do |_t,p|
|
433
433
|
assert_equal CHANNEL_DATA, p.type
|
434
|
-
connection.expect { |
|
434
|
+
connection.expect { |_t,p2| assert_equal CHANNEL_EOF, p2.type }
|
435
435
|
end
|
436
436
|
channel.send_data "foo"
|
437
437
|
channel.eof!
|
438
438
|
channel.process
|
439
|
-
|
439
|
+
end
|
440
440
|
|
441
441
|
private
|
442
442
|
|
@@ -182,7 +182,6 @@ module Connection
|
|
182
182
|
end
|
183
183
|
|
184
184
|
def test_global_request_handler_returning_other_value_should_raise_error
|
185
|
-
transport.expects(:closed?).at_least_once.returns(false)
|
186
185
|
session.on_global_request("testing") { "bug" }
|
187
186
|
transport.return(GLOBAL_REQUEST, :string, "testing", :bool, true)
|
188
187
|
assert_raises(RuntimeError) { process_times(2) }
|
data/test/integration/common.rb
CHANGED
@@ -7,8 +7,9 @@ require 'pty'
|
|
7
7
|
require 'expect'
|
8
8
|
|
9
9
|
module IntegrationTestHelpers
|
10
|
+
VERBOSE = false
|
10
11
|
def sh command
|
11
|
-
puts "$ #{command}"
|
12
|
+
puts "$ #{command}" if VERBOSE
|
12
13
|
res = system(command)
|
13
14
|
status = $?
|
14
15
|
raise "Command: #{command} failed:#{status.exitstatus}" unless res
|
@@ -28,18 +29,18 @@ module IntegrationTestHelpers
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def with_agent(&block)
|
31
|
-
puts "/usr/bin/ssh-agent -c"
|
32
|
+
puts "/usr/bin/ssh-agent -c" if VERBOSE
|
32
33
|
agent_out = `/usr/bin/ssh-agent -c`
|
33
34
|
agent_out.split("\n").each do |line|
|
34
35
|
if line =~ /setenv (\S+) (\S+);/
|
35
36
|
ENV[$1] = $2
|
36
|
-
puts "ENV[#{$1}]=#{$2}"
|
37
|
+
puts "ENV[#{$1}]=#{$2}" if VERBOSE
|
37
38
|
end
|
38
39
|
end
|
39
40
|
begin
|
40
41
|
yield
|
41
42
|
ensure
|
42
|
-
sh "/usr/bin/ssh-agent -k"
|
43
|
+
sh "/usr/bin/ssh-agent -k > /dev/null"
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
@@ -51,9 +52,10 @@ module IntegrationTestHelpers
|
|
51
52
|
reader.expect(/Enter passphrase for .*:/) { |data| puts data }
|
52
53
|
writer.puts(password)
|
53
54
|
until reader.eof? do
|
54
|
-
|
55
|
+
line = reader.readline
|
56
|
+
puts line if VERBOSE
|
55
57
|
end
|
56
|
-
rescue Errno::EIO =>
|
58
|
+
rescue Errno::EIO => _e
|
57
59
|
end
|
58
60
|
pid, status = Process.wait2 pid
|
59
61
|
end
|
@@ -3,6 +3,9 @@
|
|
3
3
|
sudo: yes
|
4
4
|
vars:
|
5
5
|
ruby_version: '2.0.0-p598'
|
6
|
+
ruby_versions:
|
7
|
+
- '2.0.0-p598'
|
8
|
+
- '2.3.0'
|
6
9
|
rvm_install_path: '/usr/local/rvm'
|
7
10
|
foopwd: "$6$mhOzf/yapZwS$3RwDl4GfWZ5VcfcsHrK9xNNTxyzLOJBsmMttDNaegIbXxMahV86.v/5HsNtit16MEl0EFf5CSW8Dz2yXV.8GB0"
|
8
11
|
foo2pwd: "$6$JiB7y7.M0yI$Abt.ZGIc4DwkRWeI6nKxzzPUZcux7hLRXSdpoKoZvswJz1SZyg5GRQWn9pGID0dgC6e4wFglfW6ev/qZoTqGk/"
|
@@ -42,13 +45,11 @@
|
|
42
45
|
- apt: name="{{item}}" state=present
|
43
46
|
with_items:
|
44
47
|
- pv
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
-
|
49
|
-
- mocha
|
50
|
-
- rbnacl
|
51
|
-
- rbnacl-libsodium
|
48
|
+
- libgmp3-dev
|
49
|
+
- gem: name="{{ item[1] }}" state=present user_install=no executable=/usr/local/rvm/wrappers/ruby-{{ item[0] }}/gem
|
50
|
+
with_nested:
|
51
|
+
- "{{ruby_versions}}"
|
52
|
+
- [ 'byebug', 'jeweler', 'mocha', 'rbnacl', 'rbnacl-libsodium' ]
|
52
53
|
- copy: content='echo "cd /net-ssh ; rake integration-test"' dest=/etc/update-motd.d/99-net-ssh-tests mode=0755
|
53
54
|
handlers:
|
54
55
|
- name: restart sshd
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'tmpdir'
|
4
|
+
|
5
|
+
require 'net/ssh'
|
6
|
+
|
7
|
+
# see Vagrantfile,playbook for env.
|
8
|
+
# we're running as net_ssh_1 user password foo
|
9
|
+
# and usually connecting to net_ssh_2 user password foo2pwd
|
10
|
+
class TestED25519PKeys < Test::Unit::TestCase
|
11
|
+
include IntegrationTestHelpers
|
12
|
+
|
13
|
+
def test_in_file_no_password
|
14
|
+
Dir.mktmpdir do |dir|
|
15
|
+
sh "rm -rf #{dir}/id_rsa_ed25519 #{dir}/id_rsa_ed25519.pub"
|
16
|
+
sh "ssh-keygen -q -f #{dir}/id_rsa_ed25519 -t ed25519 -N ''"
|
17
|
+
set_authorized_key('net_ssh_1',"#{dir}/id_rsa_ed25519.pub")
|
18
|
+
|
19
|
+
# TODO: fix bug in net ssh which reads public key even if private key is there
|
20
|
+
sh "mv #{dir}/id_rsa_ed25519.pub #{dir}/id_rsa_ed25519.pub.hidden"
|
21
|
+
|
22
|
+
#sshopts = '-vvvv -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
|
23
|
+
#sh "ssh -i #{dir}/id_rsa_ed25519 #{sshopts} net_ssh_1@localhost echo 'hello'"
|
24
|
+
|
25
|
+
ret = Net::SSH.start("localhost", "net_ssh_1", {keys: "#{dir}/id_rsa_ed25519"}) do |ssh|
|
26
|
+
ssh.exec! 'echo "hello from:$USER"'
|
27
|
+
end
|
28
|
+
assert_equal "hello from:net_ssh_1\n", ret
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
def test_ssh_agent
|
34
|
+
Dir.mktmpdir do |dir|
|
35
|
+
with_agent do
|
36
|
+
sh "rm -rf #{dir}/id_rsa_ed25519 #{dir}/id_rsa_ed25519.pub"
|
37
|
+
sh "ssh-keygen -q -f #{dir}/id_rsa_ed25519 -t ed25519 -N 'pwd'"
|
38
|
+
set_authorized_key('net_ssh_1',"#{dir}/id_rsa_ed25519.pub")
|
39
|
+
ssh_add("#{dir}/id_rsa_ed25519","pwd")
|
40
|
+
|
41
|
+
# TODO: fix bug in net ssh which reads public key even if private key is there
|
42
|
+
sh "mv #{dir}/id_rsa_ed25519.pub #{dir}/id_rsa_ed25519.pub.hidden"
|
43
|
+
|
44
|
+
ret = Net::SSH.start("localhost", "net_ssh_1") do |ssh|
|
45
|
+
ssh.exec! 'echo "hello from:$USER"'
|
46
|
+
end
|
47
|
+
assert_equal "hello from:net_ssh_1\n", ret
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_in_file_with_password
|
53
|
+
Dir.mktmpdir do |dir|
|
54
|
+
sh "rm -rf #{dir}/id_rsa_ed25519 #{dir}/id_rsa_ed25519.pub"
|
55
|
+
sh "ssh-keygen -q -f #{dir}/id_rsa_ed25519 -t ed25519 -N 'pwd'"
|
56
|
+
set_authorized_key('net_ssh_1',"#{dir}/id_rsa_ed25519.pub")
|
57
|
+
|
58
|
+
# TODO: fix bug in net ssh which reads public key even if private key is there
|
59
|
+
sh "mv #{dir}/id_rsa_ed25519.pub #{dir}/id_rsa_ed25519.pub.hidden"
|
60
|
+
|
61
|
+
#sshopts = '-vvvv -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
|
62
|
+
#sh "ssh -i #{dir}/id_rsa_ed25519 #{sshopts} net_ssh_1@localhost echo 'hello'"
|
63
|
+
|
64
|
+
ret = Net::SSH.start("localhost", "net_ssh_1", {keys: "#{dir}/id_rsa_ed25519", passphrase:'pwd'}) do |ssh|
|
65
|
+
ssh.exec! 'echo "hello from:$USER"'
|
66
|
+
end
|
67
|
+
assert_equal "hello from:net_ssh_1\n", ret
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -17,7 +17,6 @@
|
|
17
17
|
require_relative './common'
|
18
18
|
require 'net/ssh/buffer'
|
19
19
|
require 'net/ssh'
|
20
|
-
require 'net/ssh/proxy/command'
|
21
20
|
require 'timeout'
|
22
21
|
require 'tempfile'
|
23
22
|
|
@@ -32,15 +31,15 @@ class TestForward < Test::Unit::TestCase
|
|
32
31
|
'net_ssh_1'
|
33
32
|
end
|
34
33
|
|
35
|
-
def ssh_start_params
|
36
|
-
[localhost ,user , {:keys => @key_id_rsa}
|
34
|
+
def ssh_start_params
|
35
|
+
[localhost ,user , {:keys => @key_id_rsa}]
|
37
36
|
end
|
38
37
|
|
39
38
|
def setup_ssh_env(&block)
|
40
39
|
tmpdir do |dir|
|
41
40
|
@key_id_rsa = "#{dir}/id_rsa"
|
42
41
|
sh "rm -rf #{@key_id_rsa} #{@key_id_rsa}.pub"
|
43
|
-
sh "ssh-keygen -f #{@key_id_rsa} -t rsa -N ''"
|
42
|
+
sh "ssh-keygen -q -f #{@key_id_rsa} -t rsa -N ''"
|
44
43
|
set_authorized_key(user,"#{@key_id_rsa}.pub")
|
45
44
|
yield
|
46
45
|
end
|
@@ -332,117 +331,13 @@ class TestForward < Test::Unit::TestCase
|
|
332
331
|
client_done << $!
|
333
332
|
end
|
334
333
|
end
|
335
|
-
timeout(5) do
|
334
|
+
Timeout.timeout(5) do
|
336
335
|
session.loop(0.1) { server_done.empty? }
|
337
336
|
assert_equal message, server_done.pop
|
338
337
|
end
|
339
338
|
end
|
340
339
|
end
|
341
340
|
|
342
|
-
class TCPProxy
|
343
|
-
def initialize()
|
344
|
-
@sockets = []
|
345
|
-
end
|
346
|
-
attr_reader :sockets
|
347
|
-
|
348
|
-
def open(host, port, connection_options = nil)
|
349
|
-
socket = TCPSocket.new(host,port)
|
350
|
-
@sockets << socket
|
351
|
-
socket
|
352
|
-
end
|
353
|
-
|
354
|
-
def close_all
|
355
|
-
sockets.each do |socket|
|
356
|
-
socket.close
|
357
|
-
end
|
358
|
-
end
|
359
|
-
end
|
360
|
-
|
361
|
-
def test_transport_close_should_closes_channels_with_tcps
|
362
|
-
setup_ssh_env do
|
363
|
-
server = start_server do |client|
|
364
|
-
client.puts "Hello"
|
365
|
-
sleep(100)
|
366
|
-
client.puts "Hallo"
|
367
|
-
end
|
368
|
-
proxy = TCPProxy.new()
|
369
|
-
session = Net::SSH.start(*ssh_start_params(proxy: proxy))
|
370
|
-
remote_port = server.addr[1]
|
371
|
-
local_port = session.forward.local(0, localhost, remote_port)
|
372
|
-
|
373
|
-
# read on forwarded port
|
374
|
-
client_done = Queue.new
|
375
|
-
Thread.start do
|
376
|
-
begin
|
377
|
-
client = TCPSocket.new(localhost, local_port)
|
378
|
-
client.read(6)
|
379
|
-
proxy.close_all
|
380
|
-
client.read(7)
|
381
|
-
client.close
|
382
|
-
client_done << true
|
383
|
-
rescue
|
384
|
-
client_done << $!
|
385
|
-
end
|
386
|
-
end
|
387
|
-
Timeout.timeout(5) do
|
388
|
-
begin
|
389
|
-
session.loop(0.1) { true }
|
390
|
-
rescue EOFError, IOError
|
391
|
-
#puts "Error: #{$!} #{$!.backtrace.join("\n")}"
|
392
|
-
end
|
393
|
-
end
|
394
|
-
begin
|
395
|
-
Timeout.timeout(5) do
|
396
|
-
assert_equal true, client_done.pop
|
397
|
-
end
|
398
|
-
rescue
|
399
|
-
puts "Server error: #{server_error.class} #{server_error} bt:#{server_error.backtrace.join("\n")}"
|
400
|
-
raise
|
401
|
-
end
|
402
|
-
end
|
403
|
-
end
|
404
|
-
|
405
|
-
def todo_test_transport_close_should_closes_channels_with_proxy
|
406
|
-
setup_ssh_env do
|
407
|
-
server = start_server do |client|
|
408
|
-
client.puts "Hello"
|
409
|
-
sleep(100)
|
410
|
-
client.puts "Hallo"
|
411
|
-
end
|
412
|
-
proxy = Net::SSH::Proxy::Command.new("/bin/nc localhost 22")
|
413
|
-
session = Net::SSH.start(*ssh_start_params(proxy: proxy))
|
414
|
-
remote_port = server.addr[1]
|
415
|
-
local_port = session.forward.local(0, localhost, remote_port)
|
416
|
-
|
417
|
-
# read on forwarded port
|
418
|
-
client_done = Queue.new
|
419
|
-
Thread.start do
|
420
|
-
begin
|
421
|
-
client = TCPSocket.new(localhost, local_port)
|
422
|
-
client.read(6)
|
423
|
-
system("killall /bin/nc")
|
424
|
-
client.read(7)
|
425
|
-
client.close
|
426
|
-
client_done << true
|
427
|
-
rescue
|
428
|
-
client_done << $!
|
429
|
-
end
|
430
|
-
end
|
431
|
-
Timeout.timeout(5) do
|
432
|
-
begin
|
433
|
-
session.loop(0.1) { true }
|
434
|
-
rescue EOFError
|
435
|
-
begin
|
436
|
-
session.close
|
437
|
-
rescue
|
438
|
-
end
|
439
|
-
#puts "Error: #{$!} #{$!.backtrace.join("\n")}"
|
440
|
-
end
|
441
|
-
assert_equal true, client_done.pop
|
442
|
-
end
|
443
|
-
end
|
444
|
-
end
|
445
|
-
|
446
341
|
def test_client_close_should_be_handled
|
447
342
|
setup_ssh_env do
|
448
343
|
message = "This is a small message!"*1000
|
@@ -470,7 +365,7 @@ class TestForward < Test::Unit::TestCase
|
|
470
365
|
client_done << $!
|
471
366
|
end
|
472
367
|
end
|
473
|
-
timeout(5) do
|
368
|
+
Timeout.timeout(5) do
|
474
369
|
session.loop(0.1) { server_done.empty? }
|
475
370
|
assert_equal message, server_done.pop
|
476
371
|
end
|
@@ -503,7 +398,7 @@ class TestForward < Test::Unit::TestCase
|
|
503
398
|
client_done << $!
|
504
399
|
end
|
505
400
|
end
|
506
|
-
timeout(5) do
|
401
|
+
Timeout.timeout(5) do
|
507
402
|
session.loop(0.1) { client_done.empty? }
|
508
403
|
assert_equal message, client_done.pop
|
509
404
|
end
|
@@ -531,7 +426,7 @@ class TestForward < Test::Unit::TestCase
|
|
531
426
|
client_done << $!
|
532
427
|
end
|
533
428
|
end
|
534
|
-
timeout(5) do
|
429
|
+
Timeout.timeout(5) do
|
535
430
|
session.loop(0.1) { client_done.empty? }
|
536
431
|
assert_equal message, client_done.pop
|
537
432
|
end
|
@@ -555,7 +450,7 @@ class TestForward < Test::Unit::TestCase
|
|
555
450
|
setup_ssh_env do
|
556
451
|
session = Net::SSH.start(*ssh_start_params)
|
557
452
|
server = start_server do |client|
|
558
|
-
|
453
|
+
_data = client.write "hello"
|
559
454
|
client.close
|
560
455
|
end
|
561
456
|
# Forward to a non existing port
|
@@ -564,7 +459,7 @@ class TestForward < Test::Unit::TestCase
|
|
564
459
|
# should return connection refused
|
565
460
|
client_done = Queue.new
|
566
461
|
_run_reading_client(client_done, local_port)
|
567
|
-
timeout(5) do
|
462
|
+
Timeout.timeout(5) do
|
568
463
|
session.loop(0.1) { client_done.empty? }
|
569
464
|
end
|
570
465
|
assert_equal nil, client_done.pop
|
@@ -573,7 +468,7 @@ class TestForward < Test::Unit::TestCase
|
|
573
468
|
remote_port = server.addr[1]
|
574
469
|
local_port = session.forward.local(0, localhost, remote_port)
|
575
470
|
_run_reading_client(client_done, local_port)
|
576
|
-
timeout(5) do
|
471
|
+
Timeout.timeout(5) do
|
577
472
|
session.loop(0.1) { client_done.empty? }
|
578
473
|
end
|
579
474
|
assert_equal "hello", client_done.pop
|
@@ -592,7 +487,7 @@ class TestForward < Test::Unit::TestCase
|
|
592
487
|
# should return connection refused
|
593
488
|
client_done = Queue.new
|
594
489
|
_run_reading_client(client_done, local_port)
|
595
|
-
timeout(5) do
|
490
|
+
Timeout.timeout(5) do
|
596
491
|
session.loop(0.1) { client_done.empty? }
|
597
492
|
end
|
598
493
|
assert_equal nil, client_done.pop
|
@@ -600,11 +495,11 @@ class TestForward < Test::Unit::TestCase
|
|
600
495
|
# start server
|
601
496
|
server = TCPServer.open(remote_port)
|
602
497
|
server = start_server(server) do |client|
|
603
|
-
|
498
|
+
_data = client.write "hello"
|
604
499
|
client.close
|
605
500
|
end
|
606
501
|
_run_reading_client(client_done, local_port)
|
607
|
-
timeout(5) do
|
502
|
+
Timeout.timeout(5) do
|
608
503
|
session.loop(0.1) { client_done.empty? }
|
609
504
|
end
|
610
505
|
assert_equal "hello", client_done.pop
|
@@ -616,7 +511,7 @@ class TestForward < Test::Unit::TestCase
|
|
616
511
|
setup_ssh_env do
|
617
512
|
session = Net::SSH.start(*ssh_start_params)
|
618
513
|
server = start_server(server) do |client|
|
619
|
-
|
514
|
+
_data = client.write "hello"
|
620
515
|
client.close
|
621
516
|
end
|
622
517
|
remote_port = server.addr[1]
|
@@ -624,7 +519,7 @@ class TestForward < Test::Unit::TestCase
|
|
624
519
|
# run client
|
625
520
|
client_done = Queue.new
|
626
521
|
_run_reading_client(client_done, local_port)
|
627
|
-
timeout(5) do
|
522
|
+
Timeout.timeout(5) do
|
628
523
|
session.loop(0.1) { client_done.empty? }
|
629
524
|
end
|
630
525
|
assert_equal "hello", client_done.pop
|
@@ -13,10 +13,10 @@ class TestIDRSAPKeys < Test::Unit::TestCase
|
|
13
13
|
def test_in_file_no_password
|
14
14
|
tmpdir do |dir|
|
15
15
|
sh "rm -rf #{dir}/id_rsa #{dir}/id_rsa.pub"
|
16
|
-
sh "ssh-keygen -f #{dir}/id_rsa -t rsa -N ''"
|
16
|
+
sh "ssh-keygen -q -f #{dir}/id_rsa -t rsa -N ''"
|
17
17
|
set_authorized_key('net_ssh_1',"#{dir}/id_rsa.pub")
|
18
18
|
|
19
|
-
sshopts = '-vvvv -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
|
19
|
+
#sshopts = '-vvvv -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
|
20
20
|
#sh "ssh -i #{dir}/id_rsa #{sshopts} net_ssh_1@localhost echo 'hello'"
|
21
21
|
|
22
22
|
ret = Net::SSH.start("localhost", "net_ssh_1", {keys: "#{dir}/id_rsa"}) do |ssh|
|
@@ -31,11 +31,11 @@ class TestIDRSAPKeys < Test::Unit::TestCase
|
|
31
31
|
tmpdir do |dir|
|
32
32
|
with_agent do
|
33
33
|
sh "rm -rf #{dir}/id_rsa #{dir}/id_rsa.pub"
|
34
|
-
sh "ssh-keygen -f #{dir}/id_rsa -t rsa -N 'pwd123'"
|
34
|
+
sh "ssh-keygen -q -f #{dir}/id_rsa -t rsa -N 'pwd123'"
|
35
35
|
set_authorized_key('net_ssh_1',"#{dir}/id_rsa.pub")
|
36
36
|
ssh_add("#{dir}/id_rsa","pwd123")
|
37
37
|
|
38
|
-
ret = Net::SSH.start("localhost", "net_ssh_1"
|
38
|
+
ret = Net::SSH.start("localhost", "net_ssh_1") do |ssh|
|
39
39
|
ssh.exec! 'echo "hello from:$USER"'
|
40
40
|
end
|
41
41
|
assert_equal "hello from:net_ssh_1\n", ret
|
@@ -47,11 +47,11 @@ class TestIDRSAPKeys < Test::Unit::TestCase
|
|
47
47
|
tmpdir do |dir|
|
48
48
|
with_agent do
|
49
49
|
sh "rm -rf #{dir}/id_rsa #{dir}/id_rsa.pub"
|
50
|
-
sh "ssh-keygen -f #{dir}/id_rsa -t rsa -N 'pwd123'"
|
50
|
+
sh "ssh-keygen -q -f #{dir}/id_rsa -t rsa -N 'pwd123'"
|
51
51
|
set_authorized_key('net_ssh_1',"#{dir}/id_rsa.pub")
|
52
52
|
ssh_add("#{dir}/id_rsa","pwd123")
|
53
53
|
|
54
|
-
ret = Net::SSH.start("localhost", "net_ssh_1",
|
54
|
+
ret = Net::SSH.start("localhost", "net_ssh_1", keys: ["#{dir}/id_rsa"]) do |ssh|
|
55
55
|
ssh.exec! 'echo "hello from:$USER"'
|
56
56
|
end
|
57
57
|
assert_equal "hello from:net_ssh_1\n", ret
|
@@ -62,14 +62,14 @@ class TestIDRSAPKeys < Test::Unit::TestCase
|
|
62
62
|
def test_in_file_with_password
|
63
63
|
tmpdir do |dir|
|
64
64
|
sh "rm -rf #{dir}/id_rsa #{dir}/id_rsa.pub"
|
65
|
-
sh "ssh-keygen -f #{dir}/id_rsa -t rsa -N 'pwd12'"
|
65
|
+
sh "ssh-keygen -q -f #{dir}/id_rsa -t rsa -N 'pwd12'"
|
66
66
|
set_authorized_key('net_ssh_1',"#{dir}/id_rsa.pub")
|
67
67
|
|
68
|
-
sshopts = '-vvvv -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
|
68
|
+
#sshopts = '-vvvv -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
|
69
69
|
#sh "ssh -i #{dir}/id_rsa #{sshopts} net_ssh_1@localhost echo 'hello'"
|
70
70
|
|
71
71
|
ret = Net::SSH.start("localhost", "net_ssh_1", {keys: "#{dir}/id_rsa",
|
72
|
-
passphrase: 'pwd12'
|
72
|
+
passphrase: 'pwd12'}) do |ssh|
|
73
73
|
ssh.exec! 'echo "hello from:$USER"'
|
74
74
|
end
|
75
75
|
assert_equal "hello from:net_ssh_1\n", ret
|
@@ -79,13 +79,13 @@ class TestIDRSAPKeys < Test::Unit::TestCase
|
|
79
79
|
def test_asks_for_passwords_when_read_from_memory
|
80
80
|
tmpdir do |dir|
|
81
81
|
sh "rm -rf #{dir}/id_rsa #{dir}/id_rsa.pub"
|
82
|
-
sh "ssh-keygen -f #{dir}/id_rsa -t rsa -N 'pwd12'"
|
82
|
+
sh "ssh-keygen -q -f #{dir}/id_rsa -t rsa -N 'pwd12'"
|
83
83
|
set_authorized_key('net_ssh_1',"#{dir}/id_rsa.pub")
|
84
84
|
private_key = File.read("#{dir}/id_rsa")
|
85
85
|
|
86
86
|
options = {keys: [], key_data: [private_key]}
|
87
87
|
|
88
|
-
key_manager = Net::SSH::Authentication::KeyManager.new(nil, options)
|
88
|
+
#key_manager = Net::SSH::Authentication::KeyManager.new(nil, options)
|
89
89
|
|
90
90
|
Net::SSH::KeyFactory.expects(:prompt).with('Enter passphrase for :', false).returns('pwd12')
|
91
91
|
Net::SSH.start("localhost", "net_ssh_1", options) do |ssh|
|