net-ssh 2.7.0 → 7.3.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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data/.dockerignore +6 -0
- data/.github/FUNDING.yml +1 -0
- data/.github/config/rubocop_linter_action.yml +4 -0
- data/.github/workflows/ci-with-docker.yml +44 -0
- data/.github/workflows/ci.yml +94 -0
- data/.github/workflows/rubocop.yml +16 -0
- data/.gitignore +15 -0
- data/.rubocop.yml +22 -0
- data/.rubocop_todo.yml +1081 -0
- data/CHANGES.txt +387 -0
- data/DEVELOPMENT.md +23 -0
- data/Dockerfile +29 -0
- data/Dockerfile.openssl3 +17 -0
- data/Gemfile +13 -0
- data/Gemfile.noed25519 +12 -0
- data/Gemfile.norbnacl +12 -0
- data/ISSUE_TEMPLATE.md +30 -0
- data/Manifest +4 -5
- data/README.md +303 -0
- data/Rakefile +174 -40
- data/SECURITY.md +4 -0
- data/THANKS.txt +25 -0
- data/appveyor.yml +58 -0
- data/docker-compose.yml +25 -0
- data/lib/net/ssh/authentication/agent.rb +279 -18
- data/lib/net/ssh/authentication/certificate.rb +183 -0
- data/lib/net/ssh/authentication/constants.rb +17 -15
- data/lib/net/ssh/authentication/ed25519.rb +184 -0
- data/lib/net/ssh/authentication/ed25519_loader.rb +31 -0
- data/lib/net/ssh/authentication/key_manager.rb +125 -54
- data/lib/net/ssh/authentication/methods/abstract.rb +67 -48
- data/lib/net/ssh/authentication/methods/hostbased.rb +34 -37
- data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +19 -12
- data/lib/net/ssh/authentication/methods/none.rb +16 -19
- data/lib/net/ssh/authentication/methods/password.rb +56 -19
- data/lib/net/ssh/authentication/methods/publickey.rb +96 -55
- data/lib/net/ssh/authentication/pageant.rb +483 -246
- data/lib/net/ssh/authentication/pub_key_fingerprint.rb +43 -0
- data/lib/net/ssh/authentication/session.rb +138 -120
- data/lib/net/ssh/buffer.rb +399 -300
- data/lib/net/ssh/buffered_io.rb +154 -150
- data/lib/net/ssh/config.rb +361 -166
- data/lib/net/ssh/connection/channel.rb +640 -596
- data/lib/net/ssh/connection/constants.rb +29 -29
- data/lib/net/ssh/connection/event_loop.rb +123 -0
- data/lib/net/ssh/connection/keepalive.rb +59 -0
- data/lib/net/ssh/connection/session.rb +628 -548
- data/lib/net/ssh/connection/term.rb +125 -123
- data/lib/net/ssh/errors.rb +101 -95
- data/lib/net/ssh/key_factory.rb +198 -100
- data/lib/net/ssh/known_hosts.rb +221 -98
- data/lib/net/ssh/loggable.rb +50 -49
- data/lib/net/ssh/packet.rb +83 -79
- data/lib/net/ssh/prompt.rb +50 -81
- data/lib/net/ssh/proxy/command.rb +108 -60
- data/lib/net/ssh/proxy/errors.rb +12 -10
- data/lib/net/ssh/proxy/http.rb +82 -78
- data/lib/net/ssh/proxy/https.rb +50 -0
- data/lib/net/ssh/proxy/jump.rb +54 -0
- data/lib/net/ssh/proxy/socks4.rb +5 -8
- data/lib/net/ssh/proxy/socks5.rb +18 -20
- data/lib/net/ssh/service/forward.rb +383 -255
- data/lib/net/ssh/test/channel.rb +145 -136
- data/lib/net/ssh/test/extensions.rb +131 -110
- data/lib/net/ssh/test/kex.rb +34 -32
- data/lib/net/ssh/test/local_packet.rb +46 -44
- data/lib/net/ssh/test/packet.rb +89 -70
- data/lib/net/ssh/test/remote_packet.rb +32 -30
- data/lib/net/ssh/test/script.rb +156 -142
- data/lib/net/ssh/test/socket.rb +49 -48
- data/lib/net/ssh/test.rb +82 -77
- data/lib/net/ssh/transport/aes128_gcm.rb +40 -0
- data/lib/net/ssh/transport/aes256_gcm.rb +40 -0
- data/lib/net/ssh/transport/algorithms.rb +472 -348
- data/lib/net/ssh/transport/chacha20_poly1305_cipher.rb +117 -0
- data/lib/net/ssh/transport/chacha20_poly1305_cipher_loader.rb +17 -0
- data/lib/net/ssh/transport/cipher_factory.rb +124 -100
- data/lib/net/ssh/transport/constants.rb +32 -24
- data/lib/net/ssh/transport/ctr.rb +42 -22
- data/lib/net/ssh/transport/gcm_cipher.rb +207 -0
- data/lib/net/ssh/transport/hmac/abstract.rb +97 -63
- data/lib/net/ssh/transport/hmac/md5.rb +0 -2
- data/lib/net/ssh/transport/hmac/md5_96.rb +0 -2
- data/lib/net/ssh/transport/hmac/none.rb +0 -2
- data/lib/net/ssh/transport/hmac/ripemd160.rb +0 -2
- data/lib/net/ssh/transport/hmac/sha1.rb +0 -2
- data/lib/net/ssh/transport/hmac/sha1_96.rb +0 -2
- data/lib/net/ssh/transport/hmac/sha2_256.rb +7 -11
- data/lib/net/ssh/transport/hmac/sha2_256_96.rb +4 -8
- data/lib/net/ssh/transport/hmac/sha2_256_etm.rb +12 -0
- data/lib/net/ssh/transport/hmac/sha2_512.rb +6 -9
- data/lib/net/ssh/transport/hmac/sha2_512_96.rb +4 -8
- data/lib/net/ssh/transport/hmac/sha2_512_etm.rb +12 -0
- data/lib/net/ssh/transport/hmac.rb +14 -12
- data/lib/net/ssh/transport/identity_cipher.rb +54 -44
- data/lib/net/ssh/transport/kex/abstract.rb +130 -0
- data/lib/net/ssh/transport/kex/abstract5656.rb +72 -0
- data/lib/net/ssh/transport/kex/curve25519_sha256.rb +39 -0
- data/lib/net/ssh/transport/kex/curve25519_sha256_loader.rb +30 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb +33 -40
- data/lib/net/ssh/transport/kex/diffie_hellman_group14_sha256.rb +11 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +119 -213
- data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +53 -61
- data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb +5 -9
- data/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb +36 -90
- data/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb +18 -10
- data/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb +18 -10
- data/lib/net/ssh/transport/kex.rb +15 -12
- data/lib/net/ssh/transport/key_expander.rb +24 -20
- data/lib/net/ssh/transport/openssl.rb +161 -124
- data/lib/net/ssh/transport/openssl_cipher_extensions.rb +8 -0
- data/lib/net/ssh/transport/packet_stream.rb +246 -183
- data/lib/net/ssh/transport/server_version.rb +57 -51
- data/lib/net/ssh/transport/session.rb +307 -235
- data/lib/net/ssh/transport/state.rb +178 -176
- data/lib/net/ssh/verifiers/accept_new.rb +33 -0
- data/lib/net/ssh/verifiers/accept_new_or_local_tunnel.rb +33 -0
- data/lib/net/ssh/verifiers/always.rb +58 -0
- data/lib/net/ssh/verifiers/never.rb +19 -0
- data/lib/net/ssh/version.rb +57 -51
- data/lib/net/ssh.rb +140 -40
- data/net-ssh-public_cert.pem +21 -0
- data/net-ssh.gemspec +39 -184
- data/support/ssh_tunnel_bug.rb +5 -5
- data.tar.gz.sig +0 -0
- metadata +205 -99
- metadata.gz.sig +0 -0
- data/README.rdoc +0 -219
- data/Rudyfile +0 -96
- data/gem-public_cert.pem +0 -20
- data/lib/net/ssh/authentication/agent/java_pageant.rb +0 -85
- data/lib/net/ssh/authentication/agent/socket.rb +0 -170
- data/lib/net/ssh/ruby_compat.rb +0 -51
- data/lib/net/ssh/verifiers/lenient.rb +0 -30
- data/lib/net/ssh/verifiers/null.rb +0 -12
- data/lib/net/ssh/verifiers/secure.rb +0 -54
- data/lib/net/ssh/verifiers/strict.rb +0 -24
- data/setup.rb +0 -1585
- data/support/arcfour_check.rb +0 -20
- data/test/README.txt +0 -47
- data/test/authentication/methods/common.rb +0 -28
- data/test/authentication/methods/test_abstract.rb +0 -51
- data/test/authentication/methods/test_hostbased.rb +0 -114
- data/test/authentication/methods/test_keyboard_interactive.rb +0 -100
- data/test/authentication/methods/test_none.rb +0 -41
- data/test/authentication/methods/test_password.rb +0 -52
- data/test/authentication/methods/test_publickey.rb +0 -148
- data/test/authentication/test_agent.rb +0 -205
- data/test/authentication/test_key_manager.rb +0 -218
- data/test/authentication/test_session.rb +0 -108
- data/test/common.rb +0 -108
- data/test/configs/eqsign +0 -3
- data/test/configs/exact_match +0 -8
- data/test/configs/host_plus +0 -10
- data/test/configs/multihost +0 -4
- data/test/configs/nohost +0 -19
- data/test/configs/numeric_host +0 -4
- data/test/configs/send_env +0 -2
- data/test/configs/substitutes +0 -8
- data/test/configs/wild_cards +0 -14
- data/test/connection/test_channel.rb +0 -467
- data/test/connection/test_session.rb +0 -526
- data/test/known_hosts/github +0 -1
- data/test/manual/test_forward.rb +0 -223
- data/test/start/test_options.rb +0 -36
- data/test/start/test_transport.rb +0 -28
- data/test/test_all.rb +0 -11
- data/test/test_buffer.rb +0 -433
- data/test/test_buffered_io.rb +0 -63
- data/test/test_config.rb +0 -151
- data/test/test_key_factory.rb +0 -173
- data/test/test_known_hosts.rb +0 -13
- data/test/transport/hmac/test_md5.rb +0 -41
- data/test/transport/hmac/test_md5_96.rb +0 -27
- data/test/transport/hmac/test_none.rb +0 -34
- data/test/transport/hmac/test_ripemd160.rb +0 -36
- data/test/transport/hmac/test_sha1.rb +0 -36
- data/test/transport/hmac/test_sha1_96.rb +0 -27
- data/test/transport/hmac/test_sha2_256.rb +0 -37
- data/test/transport/hmac/test_sha2_256_96.rb +0 -27
- data/test/transport/hmac/test_sha2_512.rb +0 -37
- data/test/transport/hmac/test_sha2_512_96.rb +0 -27
- data/test/transport/kex/test_diffie_hellman_group14_sha1.rb +0 -13
- data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +0 -146
- data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +0 -92
- data/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb +0 -34
- data/test/transport/kex/test_ecdh_sha2_nistp256.rb +0 -161
- data/test/transport/kex/test_ecdh_sha2_nistp384.rb +0 -38
- data/test/transport/kex/test_ecdh_sha2_nistp521.rb +0 -38
- data/test/transport/test_algorithms.rb +0 -330
- data/test/transport/test_cipher_factory.rb +0 -443
- data/test/transport/test_hmac.rb +0 -34
- data/test/transport/test_identity_cipher.rb +0 -40
- data/test/transport/test_packet_stream.rb +0 -1755
- data/test/transport/test_server_version.rb +0 -78
- data/test/transport/test_session.rb +0 -319
- data/test/transport/test_state.rb +0 -181
data/lib/net/ssh/proxy/socks4.rb
CHANGED
@@ -6,7 +6,6 @@ require 'net/ssh/proxy/errors'
|
|
6
6
|
module Net
|
7
7
|
module SSH
|
8
8
|
module Proxy
|
9
|
-
|
10
9
|
# An implementation of a SOCKS4 proxy. To use it, instantiate it, then
|
11
10
|
# pass the instantiated object via the :proxy key to Net::SSH.start:
|
12
11
|
#
|
@@ -17,7 +16,6 @@ module Net
|
|
17
16
|
# ...
|
18
17
|
# end
|
19
18
|
class SOCKS4
|
20
|
-
|
21
19
|
# The SOCKS protocol version used by this class
|
22
20
|
VERSION = 4
|
23
21
|
|
@@ -39,7 +37,7 @@ module Net
|
|
39
37
|
# Create a new proxy connection to the given proxy host and port.
|
40
38
|
# Optionally, a :user key may be given to identify the username
|
41
39
|
# with which to authenticate.
|
42
|
-
def initialize(proxy_host, proxy_port=1080, options={})
|
40
|
+
def initialize(proxy_host, proxy_port = 1080, options = {})
|
43
41
|
@proxy_host = proxy_host
|
44
42
|
@proxy_port = proxy_port
|
45
43
|
@options = options
|
@@ -47,10 +45,11 @@ module Net
|
|
47
45
|
|
48
46
|
# Return a new socket connected to the given host and port via the
|
49
47
|
# proxy that was requested when the socket factory was instantiated.
|
50
|
-
def open(host, port)
|
51
|
-
socket =
|
48
|
+
def open(host, port, connection_options)
|
49
|
+
socket = Socket.tcp(proxy_host, proxy_port, nil, nil,
|
50
|
+
connect_timeout: connection_options[:timeout])
|
52
51
|
ip_addr = IPAddr.new(Resolv.getaddress(host))
|
53
|
-
|
52
|
+
|
54
53
|
packet = [VERSION, CONNECT, port.to_i, ip_addr.to_i, options[:user]].pack("CCnNZ*")
|
55
54
|
socket.send packet, 0
|
56
55
|
|
@@ -62,9 +61,7 @@ module Net
|
|
62
61
|
|
63
62
|
return socket
|
64
63
|
end
|
65
|
-
|
66
64
|
end
|
67
|
-
|
68
65
|
end
|
69
66
|
end
|
70
67
|
end
|
data/lib/net/ssh/proxy/socks5.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
require 'socket'
|
2
|
-
require 'net/ssh/ruby_compat'
|
3
2
|
require 'net/ssh/proxy/errors'
|
4
3
|
|
5
4
|
module Net
|
6
5
|
module SSH
|
7
6
|
module Proxy
|
8
|
-
|
9
7
|
# An implementation of a SOCKS5 proxy. To use it, instantiate it, then
|
10
8
|
# pass the instantiated object via the :proxy key to Net::SSH.start:
|
11
9
|
#
|
@@ -54,7 +52,7 @@ module Net
|
|
54
52
|
# Create a new proxy connection to the given proxy host and port.
|
55
53
|
# Optionally, :user and :password options may be given to
|
56
54
|
# identify the username and password with which to authenticate.
|
57
|
-
def initialize(proxy_host, proxy_port=1080, options={})
|
55
|
+
def initialize(proxy_host, proxy_port = 1080, options = {})
|
58
56
|
@proxy_host = proxy_host
|
59
57
|
@proxy_port = proxy_port
|
60
58
|
@options = options
|
@@ -62,8 +60,9 @@ module Net
|
|
62
60
|
|
63
61
|
# Return a new socket connected to the given host and port via the
|
64
62
|
# proxy that was requested when the socket factory was instantiated.
|
65
|
-
def open(host, port)
|
66
|
-
socket =
|
63
|
+
def open(host, port, connection_options)
|
64
|
+
socket = Socket.tcp(proxy_host, proxy_port, nil, nil,
|
65
|
+
connect_timeout: connection_options[:timeout])
|
67
66
|
|
68
67
|
methods = [METHOD_NO_AUTH]
|
69
68
|
methods << METHOD_PASSWD if options[:user]
|
@@ -94,13 +93,13 @@ module Net
|
|
94
93
|
|
95
94
|
packet << [port].pack("n")
|
96
95
|
socket.send packet, 0
|
97
|
-
|
96
|
+
|
98
97
|
version, reply, = socket.recv(2).unpack("C*")
|
99
98
|
socket.recv(1)
|
100
99
|
address_type = socket.recv(1).getbyte(0)
|
101
100
|
case address_type
|
102
101
|
when 1
|
103
|
-
socket.recv(4)
|
102
|
+
socket.recv(4) # get four bytes for IPv4 address
|
104
103
|
when 3
|
105
104
|
len = socket.recv(1).getbyte(0)
|
106
105
|
hostname = socket.recv(len)
|
@@ -108,10 +107,10 @@ module Net
|
|
108
107
|
ipv6addr hostname = socket.recv(16)
|
109
108
|
else
|
110
109
|
socket.close
|
111
|
-
raise
|
110
|
+
raise ConnectError, "Illegal response type"
|
112
111
|
end
|
113
112
|
portnum = socket.recv(2)
|
114
|
-
|
113
|
+
|
115
114
|
unless reply == SUCCESS
|
116
115
|
socket.close
|
117
116
|
raise ConnectError, "#{reply}"
|
@@ -122,21 +121,20 @@ module Net
|
|
122
121
|
|
123
122
|
private
|
124
123
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
124
|
+
# Simple username/password negotiation with the SOCKS5 server.
|
125
|
+
def negotiate_password(socket)
|
126
|
+
packet = [0x01, options[:user].length, options[:user],
|
127
|
+
options[:password].length, options[:password]].pack("CCA*CA*")
|
128
|
+
socket.send packet, 0
|
130
129
|
|
131
|
-
|
130
|
+
version, status = socket.recv(2).unpack("CC")
|
132
131
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
end
|
132
|
+
if status != SUCCESS
|
133
|
+
socket.close
|
134
|
+
raise UnauthorizedError, "could not authorize user"
|
137
135
|
end
|
136
|
+
end
|
138
137
|
end
|
139
|
-
|
140
138
|
end
|
141
139
|
end
|
142
140
|
end
|