cucumber-sshd 1.1.1 → 2.0.0.pre
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
- data/lib/cucumber/sshd/cucumber.rb +6 -6
- data/lib/cucumber/sshd/server.rb +84 -93
- data/lib/cucumber/sshd/version.rb +1 -1
- metadata +20 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc37a65b387332778989833f88297ebc5de1d15d
|
4
|
+
data.tar.gz: 8d4b5945eb138b9720e1b8fb41037afd9c023856
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8f34e74f453dfc253501894d3fe1d1bd61dd7bc6ed4cca2faf3aebc667031b568af0ca7ff7ec81d74f596f8eb87f20bb7adc9d4e64d63c9b5467b410f68fa27
|
7
|
+
data.tar.gz: e59c9c431835c47046aaeb371f28af948bb71ff6e4a5cad06e102b0c15120f24151fc50b388ec809651998aa7b58ca09f1672f5779a4614c00dbaa60c373d633
|
@@ -1,21 +1,21 @@
|
|
1
1
|
require 'cucumber/sshd/server'
|
2
2
|
|
3
|
-
Before
|
4
|
-
start_server =
|
5
|
-
Cucumber::SSHD::Server.start
|
3
|
+
Before '@sshd' do
|
4
|
+
start_server = -> home do
|
5
|
+
Cucumber::SSHD::Server.start home, wait_ready: @_sshd_wait_ready
|
6
6
|
end
|
7
7
|
|
8
8
|
if @_sshd_fast && !$_sshd
|
9
9
|
unless $_sshd
|
10
|
-
$_sshd = start_server.call
|
10
|
+
$_sshd = start_server.call @_sshd_home
|
11
11
|
at_exit { $_sshd.stop }
|
12
12
|
end
|
13
13
|
@_sshd = $_sshd
|
14
14
|
else
|
15
|
-
@_sshd = start_server.call
|
15
|
+
@_sshd = start_server.call @_sshd_home
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
After
|
19
|
+
After '@sshd' do
|
20
20
|
@_sshd.stop unless @_sshd_fast
|
21
21
|
end
|
data/lib/cucumber/sshd/server.rb
CHANGED
@@ -1,114 +1,108 @@
|
|
1
|
-
require 'aruba/api'
|
2
|
-
|
3
1
|
module Cucumber
|
4
2
|
module SSHD
|
5
3
|
class Server
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
BASE_PATH = 'tmp/home'.freeze
|
5
|
+
HOST = 'some_host.test'.freeze
|
6
|
+
HOSTNAME = 'localhost'.freeze
|
7
|
+
LISTEN_ADDR = '::1'.freeze
|
9
8
|
PORT = 2222
|
10
|
-
COMMAND = '/usr/sbin/sshd'
|
11
|
-
COMMAND_ARGS = '-Deq'
|
12
|
-
KEY_PATH = 'etc/ssh_host_rsa_key'
|
13
|
-
KEY_PUB_PATH = KEY_PATH
|
14
|
-
SSHD_CONFIG_PATH = 'etc/sshd_config'
|
15
|
-
SSH_CONFIG_PATH = '.ssh/config'
|
16
|
-
SSH_KNOWN_HOSTS_PATH = '.ssh/known_host'
|
9
|
+
COMMAND = '/usr/sbin/sshd'.freeze
|
10
|
+
COMMAND_ARGS = '-Deq'.freeze
|
11
|
+
KEY_PATH = 'etc/ssh_host_rsa_key'.freeze
|
12
|
+
KEY_PUB_PATH = [KEY_PATH, '.pub'].join.freeze
|
13
|
+
SSHD_CONFIG_PATH = 'etc/sshd_config'.freeze
|
14
|
+
SSH_CONFIG_PATH = '.ssh/config'.freeze
|
15
|
+
SSH_KNOWN_HOSTS_PATH = '.ssh/known_host'.freeze
|
17
16
|
SFTP_SERVER_PATHS = %w[
|
18
17
|
/usr/libexec/sftp-server
|
19
18
|
/usr/lib/openssh/sftp-server
|
20
|
-
]
|
19
|
+
].freeze
|
20
|
+
|
21
|
+
KEY = <<-eoh.freeze
|
22
|
+
-----BEGIN EC PRIVATE KEY-----
|
23
|
+
MHcCAQEEIJbQy3yg9iU4xFvia9DWKWuhMzI5QGncR6OUldAOSIe7oAoGCCqGSM49
|
24
|
+
AwEHoUQDQgAEJpS8Sknl2X6PNurToQCNu5lX/scaJLr3FkiufD+p67epbwIjiyzo
|
25
|
+
qnLMVQddVitzQP7LEhXbNUuUAzEMfA6rAA==
|
26
|
+
-----END EC PRIVATE KEY-----
|
27
|
+
eoh
|
28
|
+
KEY_PUB =
|
29
|
+
'ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNT' \
|
30
|
+
'YAAABBBCaUvEpJ5dl+jzbq06EAjbuZV/7HGiS69xZIrnw/qeu3qW8CI4ss6KpyzFUH' \
|
31
|
+
'XVYrc0D+yxIV2zVLlAMxDHwOqwA='
|
32
|
+
|
21
33
|
class << self
|
22
|
-
def start
|
23
|
-
server = new
|
24
|
-
server.
|
34
|
+
def start *args
|
35
|
+
server = new args.shift, *args
|
36
|
+
server.configure
|
25
37
|
server.start
|
26
38
|
server
|
27
39
|
end
|
28
40
|
end
|
29
41
|
|
30
|
-
attr_accessor :base_path, :host, :port, :pid
|
42
|
+
attr_accessor :base_path, :host, :addr, :port, :pid
|
31
43
|
|
32
|
-
def initialize
|
33
|
-
@base_path = base_path
|
34
|
-
@host =
|
35
|
-
@
|
44
|
+
def initialize base_path, wait_ready: false
|
45
|
+
@base_path = base_path || BASE_PATH
|
46
|
+
@host = HOST
|
47
|
+
@addr = ENV.fetch 'CUCUMBER_SSHD_LISTEN', LISTEN_ADDR
|
48
|
+
@port = ENV.fetch 'CUCUMBER_SSHD_PORT', PORT
|
36
49
|
@pid = nil
|
37
50
|
@wait_ready = wait_ready
|
38
51
|
end
|
39
52
|
|
40
|
-
def
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
def wait_ready?
|
45
|
-
!!@wait_ready
|
53
|
+
def configure
|
54
|
+
%w[etc .ssh].map { |e| create_dir_secure e }
|
55
|
+
configure_server
|
56
|
+
configure_client
|
46
57
|
end
|
47
58
|
|
48
59
|
def start
|
49
|
-
|
60
|
+
Dir.chdir base_path do
|
50
61
|
@pid = fork do
|
51
|
-
$stderr.reopen '/dev/null'
|
62
|
+
$stderr.reopen '/dev/null' unless ENV.key? 'CUCUMBER_SSHD_DEBUG'
|
52
63
|
exec command
|
53
64
|
end
|
65
|
+
if ENV.key? 'CUCUMBER_SSHD_DEBUG'
|
66
|
+
sleep 0.05
|
67
|
+
fail "`#{command}` failed" if Process.waitpid pid, Process::WNOHANG
|
68
|
+
end
|
54
69
|
end
|
55
70
|
|
56
71
|
wait_ready! if wait_ready?
|
57
72
|
end
|
58
73
|
|
59
|
-
def wait_ready!
|
60
|
-
TCPSocket.new 'localhost', port
|
61
|
-
rescue Errno::ECONNREFUSED
|
62
|
-
sleep 0.05
|
63
|
-
retry
|
64
|
-
end
|
65
|
-
|
66
74
|
def stop
|
67
|
-
Process.kill
|
68
|
-
Process.wait
|
75
|
+
Process.kill 'TERM', pid
|
76
|
+
Process.wait pid
|
69
77
|
end
|
70
78
|
|
71
|
-
|
72
|
-
%w[etc .ssh].map { |e| create_dir_secure e }
|
79
|
+
private
|
73
80
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
knUwsnQNOQTuPPQFBelmDViaCiEwjGlJm+6F6KrMqERarO+Cr63l5m98YfoWJkWR
|
83
|
-
dZxdPT22rWHGMk6PzuYxZxoszgoCJ2skzWAcW1EFvBjhROHwAr0Qk1Ssut4NX/DB
|
84
|
-
B04FS2X5HS2QCOuwNymqnpejtmk+A2hv9bGVzj0X614gX3h5+0dImGrYE0Lu+Abf
|
85
|
-
5fvWhN5nxgK5CVlU7WM09WxyHj9lBXI+W2dgTl6w3QJfBBQTkarLmDpwIeErq9xc
|
86
|
-
al2qHj60nYC+RdFopuLfJWKiObdKRFpuPFYKbTA9nJz9T61zAF+LaDZ1mvdTuQmz
|
87
|
-
jJEJ0nECgYEA+o2uJcDOCD2LBp2LqeQcGk1PrFLpSQ5921B10SxDWhygs2+UlBCW
|
88
|
-
7t/qurqjEUZ91l3TAlUM7ViB/EkXk/xWJRJCzlmWRXfht9LPQTWlnDox/w8uSV2g
|
89
|
-
3VwPx1xpju2PHO7Vsk6dsQsyoro14qNhYa9m1lBHA1TtJ/RLWauvnmUCgYEA8WgZ
|
90
|
-
MthPXi/clDg2DlROGOEWd7WgaErEz578HWnegcMrHb8RV/XW21CO2UegHykzUlxz
|
91
|
-
vJxAqhQeKJbP7T8uzuCZnkZqBqPh5PJT1XqxZibTeQvqYLzbIiKqmDrZWuRJvbLL
|
92
|
-
kPxwYEG8R8nl9Dk1tLHuTQWWa5Q49he1cDss4GUCgYEA7WMBRZnIW3xb1Xe9VMjg
|
93
|
-
a3cmbqHbj7FgQ0OXbQigA6euBnRIdITHTCnxDtw4Fe0Q2uLoQoRsjA/YkDx8T2S8
|
94
|
-
BcGodDPjMYxk2rKsVR9L+poUtpEejLpd6H0KIhwHkzi26HXNGHRt6ckvP4hn94RO
|
95
|
-
hqwWJiXHMnvrenh2T85fxRUCgYEA7m06NhWejhAHc/zwpsZtO/VUE3e3rknqiIUl
|
96
|
-
zIc71D3G3+JOZunQA1xVOhSb+SrgHYBibu6Ej3a/MqeBRXkZ6gm6r7AsF9LU0SLl
|
97
|
-
2fsMKzA9vVgfbNwaMmS6yQ+WjUbb7hghJlmtQ+So6N5n2AaJHKaADmJuZmJGwAg6
|
98
|
-
k1ZexGECgYAFc+GjjFOPxC+Qg6z8261PnDffBK0o+0/EIq3cGA7Cp5pEo/hhMjDl
|
99
|
-
W7CLjAGkok9W+rr9XwwXWCBuJmPh2jYeNaQljrHt9hIAOAxoYdbweb9oSo5SkcHv
|
100
|
-
iDjcFK8S1e5vnlZAh9xH1WMCEsaz1WNqWm7CZOayN2LFn6Ed9seYYg==
|
101
|
-
-----END RSA PRIVATE KEY-----
|
102
|
-
eoh
|
81
|
+
def command
|
82
|
+
[
|
83
|
+
COMMAND,
|
84
|
+
'-f',
|
85
|
+
SSHD_CONFIG_PATH,
|
86
|
+
COMMAND_ARGS
|
87
|
+
].join ' '
|
88
|
+
end
|
103
89
|
|
104
|
-
|
105
|
-
|
90
|
+
def configure_client
|
91
|
+
write_file_secure SSH_CONFIG_PATH, <<-eoh
|
92
|
+
Host #{host}
|
93
|
+
HostName #{HOSTNAME}
|
94
|
+
Port #{port}
|
95
|
+
UserKnownHostsFile #{File.expand_path base_path}/#{SSH_KNOWN_HOSTS_PATH}
|
106
96
|
eoh
|
97
|
+
write_file_secure SSH_KNOWN_HOSTS_PATH, "[#{HOSTNAME}]:2222 #{KEY_PUB}"
|
98
|
+
end
|
107
99
|
|
100
|
+
def configure_server
|
101
|
+
write_file_secure KEY_PATH, KEY
|
102
|
+
write_file_secure KEY_PUB_PATH, KEY_PUB
|
108
103
|
write_file_secure SSHD_CONFIG_PATH, <<-eoh
|
109
104
|
Port #{port}
|
110
|
-
ListenAddress
|
111
|
-
|
105
|
+
ListenAddress #{addr}
|
112
106
|
Protocol 2
|
113
107
|
HostKey #{File.expand_path base_path}/#{KEY_PATH}
|
114
108
|
PidFile /dev/null
|
@@ -116,34 +110,31 @@ UsePrivilegeSeparation no
|
|
116
110
|
Subsystem sftp #{sftp_server_path}
|
117
111
|
ForceCommand HOME=#{File.expand_path base_path} sh -c "cd ~; [ -f .ssh/rc ] && . .ssh/rc; $SSH_ORIGINAL_COMMAND"
|
118
112
|
eoh
|
119
|
-
|
120
|
-
write_file_secure SSH_CONFIG_PATH, <<-eoh
|
121
|
-
Host #{host}
|
122
|
-
HostName localhost
|
123
|
-
Port #{port}
|
124
|
-
UserKnownHostsFile #{File.expand_path base_path}/#{SSH_KNOWN_HOSTS_PATH}
|
125
|
-
eoh
|
126
|
-
|
127
|
-
write_file_secure SSH_KNOWN_HOSTS_PATH, <<-eoh
|
128
|
-
[localhost]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDsRUMp4zs1gIYZUnDTBYsYKim0wVJHsOhuFsTHZsBBtYMsUEXtL1telb9115sUDgYGQdWuI0/C78gaMiA7e2K9VzLqKC40p1hEAGVJ+l4Cz450LMqHIRaGYqcUxmzYyE+ImD8pR6naAVkugRyz2+STfv5wty5RWRdU5I9eVgK4eOCTBo32KP8q8Jws/i3Dzcfc/KHVaf9jiTX7edY3ZLdGBEcX1GMTHuebYWZdxmrXDKA97kbZtA29krKQv7CUogfAqIzgBalUKVzM6KWM2/0pE6EZZqchk00EgNOeKTEW9jQXKg/Wq9GsTwGWrE17Ib+9g2Zey/zGk7Qw4XrnPd3Z
|
129
|
-
eoh
|
130
113
|
end
|
131
114
|
|
115
|
+
def create_dir_secure path
|
116
|
+
FileUtils.mkdir_p File.join(base_path, path), mode: 0700
|
117
|
+
end
|
132
118
|
|
133
|
-
|
119
|
+
def sftp_server_path
|
120
|
+
SFTP_SERVER_PATHS.detect { |e| File.exist? e }
|
121
|
+
end
|
134
122
|
|
135
|
-
def
|
136
|
-
|
137
|
-
|
123
|
+
def wait_ready!
|
124
|
+
TCPSocket.new HOSTNAME, port
|
125
|
+
rescue Errno::ECONNREFUSED
|
126
|
+
sleep 0.05
|
127
|
+
retry
|
138
128
|
end
|
139
129
|
|
140
|
-
def
|
141
|
-
|
142
|
-
chmod 0700, path
|
130
|
+
def wait_ready?
|
131
|
+
!!@wait_ready
|
143
132
|
end
|
144
133
|
|
145
|
-
def
|
146
|
-
|
134
|
+
def write_file_secure path, content
|
135
|
+
File.open File.join(base_path, path), ?w, 0600 do |file|
|
136
|
+
file.write content
|
137
|
+
end
|
147
138
|
end
|
148
139
|
end
|
149
140
|
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-sshd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibault Jouan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: childprocess
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '10.4'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-expectations
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.7'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.7'
|
55
69
|
description: Run an sshd server for scenarios tagged with @sshd
|
56
70
|
email: tj@a13.fr
|
57
71
|
executables: []
|
@@ -77,12 +91,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
77
91
|
version: '0'
|
78
92
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- - "
|
94
|
+
- - ">"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
96
|
+
version: 1.3.1
|
83
97
|
requirements: []
|
84
98
|
rubyforge_project:
|
85
|
-
rubygems_version: 2.
|
99
|
+
rubygems_version: 2.6.14
|
86
100
|
signing_key:
|
87
101
|
specification_version: 4
|
88
102
|
summary: Cucumber sshd helpers
|