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.
Files changed (199) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/.dockerignore +6 -0
  4. data/.github/FUNDING.yml +1 -0
  5. data/.github/config/rubocop_linter_action.yml +4 -0
  6. data/.github/workflows/ci-with-docker.yml +44 -0
  7. data/.github/workflows/ci.yml +94 -0
  8. data/.github/workflows/rubocop.yml +16 -0
  9. data/.gitignore +15 -0
  10. data/.rubocop.yml +22 -0
  11. data/.rubocop_todo.yml +1081 -0
  12. data/CHANGES.txt +387 -0
  13. data/DEVELOPMENT.md +23 -0
  14. data/Dockerfile +29 -0
  15. data/Dockerfile.openssl3 +17 -0
  16. data/Gemfile +13 -0
  17. data/Gemfile.noed25519 +12 -0
  18. data/Gemfile.norbnacl +12 -0
  19. data/ISSUE_TEMPLATE.md +30 -0
  20. data/Manifest +4 -5
  21. data/README.md +303 -0
  22. data/Rakefile +174 -40
  23. data/SECURITY.md +4 -0
  24. data/THANKS.txt +25 -0
  25. data/appveyor.yml +58 -0
  26. data/docker-compose.yml +25 -0
  27. data/lib/net/ssh/authentication/agent.rb +279 -18
  28. data/lib/net/ssh/authentication/certificate.rb +183 -0
  29. data/lib/net/ssh/authentication/constants.rb +17 -15
  30. data/lib/net/ssh/authentication/ed25519.rb +184 -0
  31. data/lib/net/ssh/authentication/ed25519_loader.rb +31 -0
  32. data/lib/net/ssh/authentication/key_manager.rb +125 -54
  33. data/lib/net/ssh/authentication/methods/abstract.rb +67 -48
  34. data/lib/net/ssh/authentication/methods/hostbased.rb +34 -37
  35. data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +19 -12
  36. data/lib/net/ssh/authentication/methods/none.rb +16 -19
  37. data/lib/net/ssh/authentication/methods/password.rb +56 -19
  38. data/lib/net/ssh/authentication/methods/publickey.rb +96 -55
  39. data/lib/net/ssh/authentication/pageant.rb +483 -246
  40. data/lib/net/ssh/authentication/pub_key_fingerprint.rb +43 -0
  41. data/lib/net/ssh/authentication/session.rb +138 -120
  42. data/lib/net/ssh/buffer.rb +399 -300
  43. data/lib/net/ssh/buffered_io.rb +154 -150
  44. data/lib/net/ssh/config.rb +361 -166
  45. data/lib/net/ssh/connection/channel.rb +640 -596
  46. data/lib/net/ssh/connection/constants.rb +29 -29
  47. data/lib/net/ssh/connection/event_loop.rb +123 -0
  48. data/lib/net/ssh/connection/keepalive.rb +59 -0
  49. data/lib/net/ssh/connection/session.rb +628 -548
  50. data/lib/net/ssh/connection/term.rb +125 -123
  51. data/lib/net/ssh/errors.rb +101 -95
  52. data/lib/net/ssh/key_factory.rb +198 -100
  53. data/lib/net/ssh/known_hosts.rb +221 -98
  54. data/lib/net/ssh/loggable.rb +50 -49
  55. data/lib/net/ssh/packet.rb +83 -79
  56. data/lib/net/ssh/prompt.rb +50 -81
  57. data/lib/net/ssh/proxy/command.rb +108 -60
  58. data/lib/net/ssh/proxy/errors.rb +12 -10
  59. data/lib/net/ssh/proxy/http.rb +82 -78
  60. data/lib/net/ssh/proxy/https.rb +50 -0
  61. data/lib/net/ssh/proxy/jump.rb +54 -0
  62. data/lib/net/ssh/proxy/socks4.rb +5 -8
  63. data/lib/net/ssh/proxy/socks5.rb +18 -20
  64. data/lib/net/ssh/service/forward.rb +383 -255
  65. data/lib/net/ssh/test/channel.rb +145 -136
  66. data/lib/net/ssh/test/extensions.rb +131 -110
  67. data/lib/net/ssh/test/kex.rb +34 -32
  68. data/lib/net/ssh/test/local_packet.rb +46 -44
  69. data/lib/net/ssh/test/packet.rb +89 -70
  70. data/lib/net/ssh/test/remote_packet.rb +32 -30
  71. data/lib/net/ssh/test/script.rb +156 -142
  72. data/lib/net/ssh/test/socket.rb +49 -48
  73. data/lib/net/ssh/test.rb +82 -77
  74. data/lib/net/ssh/transport/aes128_gcm.rb +40 -0
  75. data/lib/net/ssh/transport/aes256_gcm.rb +40 -0
  76. data/lib/net/ssh/transport/algorithms.rb +472 -348
  77. data/lib/net/ssh/transport/chacha20_poly1305_cipher.rb +117 -0
  78. data/lib/net/ssh/transport/chacha20_poly1305_cipher_loader.rb +17 -0
  79. data/lib/net/ssh/transport/cipher_factory.rb +124 -100
  80. data/lib/net/ssh/transport/constants.rb +32 -24
  81. data/lib/net/ssh/transport/ctr.rb +42 -22
  82. data/lib/net/ssh/transport/gcm_cipher.rb +207 -0
  83. data/lib/net/ssh/transport/hmac/abstract.rb +97 -63
  84. data/lib/net/ssh/transport/hmac/md5.rb +0 -2
  85. data/lib/net/ssh/transport/hmac/md5_96.rb +0 -2
  86. data/lib/net/ssh/transport/hmac/none.rb +0 -2
  87. data/lib/net/ssh/transport/hmac/ripemd160.rb +0 -2
  88. data/lib/net/ssh/transport/hmac/sha1.rb +0 -2
  89. data/lib/net/ssh/transport/hmac/sha1_96.rb +0 -2
  90. data/lib/net/ssh/transport/hmac/sha2_256.rb +7 -11
  91. data/lib/net/ssh/transport/hmac/sha2_256_96.rb +4 -8
  92. data/lib/net/ssh/transport/hmac/sha2_256_etm.rb +12 -0
  93. data/lib/net/ssh/transport/hmac/sha2_512.rb +6 -9
  94. data/lib/net/ssh/transport/hmac/sha2_512_96.rb +4 -8
  95. data/lib/net/ssh/transport/hmac/sha2_512_etm.rb +12 -0
  96. data/lib/net/ssh/transport/hmac.rb +14 -12
  97. data/lib/net/ssh/transport/identity_cipher.rb +54 -44
  98. data/lib/net/ssh/transport/kex/abstract.rb +130 -0
  99. data/lib/net/ssh/transport/kex/abstract5656.rb +72 -0
  100. data/lib/net/ssh/transport/kex/curve25519_sha256.rb +39 -0
  101. data/lib/net/ssh/transport/kex/curve25519_sha256_loader.rb +30 -0
  102. data/lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb +33 -40
  103. data/lib/net/ssh/transport/kex/diffie_hellman_group14_sha256.rb +11 -0
  104. data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +119 -213
  105. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +53 -61
  106. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb +5 -9
  107. data/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb +36 -90
  108. data/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb +18 -10
  109. data/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb +18 -10
  110. data/lib/net/ssh/transport/kex.rb +15 -12
  111. data/lib/net/ssh/transport/key_expander.rb +24 -20
  112. data/lib/net/ssh/transport/openssl.rb +161 -124
  113. data/lib/net/ssh/transport/openssl_cipher_extensions.rb +8 -0
  114. data/lib/net/ssh/transport/packet_stream.rb +246 -183
  115. data/lib/net/ssh/transport/server_version.rb +57 -51
  116. data/lib/net/ssh/transport/session.rb +307 -235
  117. data/lib/net/ssh/transport/state.rb +178 -176
  118. data/lib/net/ssh/verifiers/accept_new.rb +33 -0
  119. data/lib/net/ssh/verifiers/accept_new_or_local_tunnel.rb +33 -0
  120. data/lib/net/ssh/verifiers/always.rb +58 -0
  121. data/lib/net/ssh/verifiers/never.rb +19 -0
  122. data/lib/net/ssh/version.rb +57 -51
  123. data/lib/net/ssh.rb +140 -40
  124. data/net-ssh-public_cert.pem +21 -0
  125. data/net-ssh.gemspec +39 -184
  126. data/support/ssh_tunnel_bug.rb +5 -5
  127. data.tar.gz.sig +0 -0
  128. metadata +205 -99
  129. metadata.gz.sig +0 -0
  130. data/README.rdoc +0 -219
  131. data/Rudyfile +0 -96
  132. data/gem-public_cert.pem +0 -20
  133. data/lib/net/ssh/authentication/agent/java_pageant.rb +0 -85
  134. data/lib/net/ssh/authentication/agent/socket.rb +0 -170
  135. data/lib/net/ssh/ruby_compat.rb +0 -51
  136. data/lib/net/ssh/verifiers/lenient.rb +0 -30
  137. data/lib/net/ssh/verifiers/null.rb +0 -12
  138. data/lib/net/ssh/verifiers/secure.rb +0 -54
  139. data/lib/net/ssh/verifiers/strict.rb +0 -24
  140. data/setup.rb +0 -1585
  141. data/support/arcfour_check.rb +0 -20
  142. data/test/README.txt +0 -47
  143. data/test/authentication/methods/common.rb +0 -28
  144. data/test/authentication/methods/test_abstract.rb +0 -51
  145. data/test/authentication/methods/test_hostbased.rb +0 -114
  146. data/test/authentication/methods/test_keyboard_interactive.rb +0 -100
  147. data/test/authentication/methods/test_none.rb +0 -41
  148. data/test/authentication/methods/test_password.rb +0 -52
  149. data/test/authentication/methods/test_publickey.rb +0 -148
  150. data/test/authentication/test_agent.rb +0 -205
  151. data/test/authentication/test_key_manager.rb +0 -218
  152. data/test/authentication/test_session.rb +0 -108
  153. data/test/common.rb +0 -108
  154. data/test/configs/eqsign +0 -3
  155. data/test/configs/exact_match +0 -8
  156. data/test/configs/host_plus +0 -10
  157. data/test/configs/multihost +0 -4
  158. data/test/configs/nohost +0 -19
  159. data/test/configs/numeric_host +0 -4
  160. data/test/configs/send_env +0 -2
  161. data/test/configs/substitutes +0 -8
  162. data/test/configs/wild_cards +0 -14
  163. data/test/connection/test_channel.rb +0 -467
  164. data/test/connection/test_session.rb +0 -526
  165. data/test/known_hosts/github +0 -1
  166. data/test/manual/test_forward.rb +0 -223
  167. data/test/start/test_options.rb +0 -36
  168. data/test/start/test_transport.rb +0 -28
  169. data/test/test_all.rb +0 -11
  170. data/test/test_buffer.rb +0 -433
  171. data/test/test_buffered_io.rb +0 -63
  172. data/test/test_config.rb +0 -151
  173. data/test/test_key_factory.rb +0 -173
  174. data/test/test_known_hosts.rb +0 -13
  175. data/test/transport/hmac/test_md5.rb +0 -41
  176. data/test/transport/hmac/test_md5_96.rb +0 -27
  177. data/test/transport/hmac/test_none.rb +0 -34
  178. data/test/transport/hmac/test_ripemd160.rb +0 -36
  179. data/test/transport/hmac/test_sha1.rb +0 -36
  180. data/test/transport/hmac/test_sha1_96.rb +0 -27
  181. data/test/transport/hmac/test_sha2_256.rb +0 -37
  182. data/test/transport/hmac/test_sha2_256_96.rb +0 -27
  183. data/test/transport/hmac/test_sha2_512.rb +0 -37
  184. data/test/transport/hmac/test_sha2_512_96.rb +0 -27
  185. data/test/transport/kex/test_diffie_hellman_group14_sha1.rb +0 -13
  186. data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +0 -146
  187. data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +0 -92
  188. data/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb +0 -34
  189. data/test/transport/kex/test_ecdh_sha2_nistp256.rb +0 -161
  190. data/test/transport/kex/test_ecdh_sha2_nistp384.rb +0 -38
  191. data/test/transport/kex/test_ecdh_sha2_nistp521.rb +0 -38
  192. data/test/transport/test_algorithms.rb +0 -330
  193. data/test/transport/test_cipher_factory.rb +0 -443
  194. data/test/transport/test_hmac.rb +0 -34
  195. data/test/transport/test_identity_cipher.rb +0 -40
  196. data/test/transport/test_packet_stream.rb +0 -1755
  197. data/test/transport/test_server_version.rb +0 -78
  198. data/test/transport/test_session.rb +0 -319
  199. data/test/transport/test_state.rb +0 -181
@@ -1,178 +1,180 @@
1
- module Net; module SSH; module Connection
2
-
3
- # These constants are used when requesting a pseudo-terminal (via
4
- # Net::SSH::Connection::Channel#request_pty). The descriptions for each are
5
- # taken directly from RFC 4254 ("The Secure Shell (SSH) Connection Protocol"),
6
- # http://tools.ietf.org/html/rfc4254.
7
- module Term
8
- # Interrupt character; 255 if none. Similarly for the other characters.
9
- # Not all of these characters are supported on all systems.
10
- VINTR = 1
1
+ module Net
2
+ module SSH
3
+ module Connection
4
+ # These constants are used when requesting a pseudo-terminal (via
5
+ # Net::SSH::Connection::Channel#request_pty). The descriptions for each are
6
+ # taken directly from RFC 4254 ("The Secure Shell (SSH) Connection Protocol"),
7
+ # http://tools.ietf.org/html/rfc4254.
8
+ module Term
9
+ # Interrupt character; 255 if none. Similarly for the other characters.
10
+ # Not all of these characters are supported on all systems.
11
+ VINTR = 1
11
12
 
12
- # The quit character (sends SIGQUIT signal on POSIX systems).
13
- VQUIT = 2
13
+ # The quit character (sends SIGQUIT signal on POSIX systems).
14
+ VQUIT = 2
14
15
 
15
- # Erase the character to left of the cursor.
16
- VERASE = 3
16
+ # Erase the character to left of the cursor.
17
+ VERASE = 3
17
18
 
18
- # Kill the current input line.
19
- VKILL = 4
19
+ # Kill the current input line.
20
+ VKILL = 4
20
21
 
21
- # End-of-file character (sends EOF from the terminal).
22
- VEOF = 5
22
+ # End-of-file character (sends EOF from the terminal).
23
+ VEOF = 5
23
24
 
24
- # End-of-line character in addition to carriage return and/or linefeed.
25
- VEOL = 6
25
+ # End-of-line character in addition to carriage return and/or linefeed.
26
+ VEOL = 6
26
27
 
27
- # Additional end-of-line character.
28
- VEOL2 = 7
28
+ # Additional end-of-line character.
29
+ VEOL2 = 7
29
30
 
30
- # Continues paused output (normally control-Q).
31
- VSTART = 8
31
+ # Continues paused output (normally control-Q).
32
+ VSTART = 8
32
33
 
33
- # Pauses output (normally control-S).
34
- VSTOP = 9
34
+ # Pauses output (normally control-S).
35
+ VSTOP = 9
35
36
 
36
- # Suspends the current program.
37
- VSUSP = 10
37
+ # Suspends the current program.
38
+ VSUSP = 10
38
39
 
39
- # Another suspend character.
40
- VDSUSP = 11
40
+ # Another suspend character.
41
+ VDSUSP = 11
41
42
 
42
- # Reprints the current input line.
43
- VREPRINT = 12
43
+ # Reprints the current input line.
44
+ VREPRINT = 12
44
45
 
45
- # Erases a word left of cursor.
46
- VWERASE = 13
46
+ # Erases a word left of cursor.
47
+ VWERASE = 13
47
48
 
48
- # Enter the next character typed literally, even if it is a special
49
- # character.
50
- VLNEXT = 14
49
+ # Enter the next character typed literally, even if it is a special
50
+ # character.
51
+ VLNEXT = 14
51
52
 
52
- # Character to flush output.
53
- VFLUSH = 15
53
+ # Character to flush output.
54
+ VFLUSH = 15
54
55
 
55
- # Switch to a different shell layer.
56
- VSWITCH = 16
56
+ # Switch to a different shell layer.
57
+ VSWITCH = 16
57
58
 
58
- # Prints system status line (load, command, pid, etc).
59
- VSTATUS = 17
59
+ # Prints system status line (load, command, pid, etc).
60
+ VSTATUS = 17
60
61
 
61
- # Toggles the flushing of terminal output.
62
- VDISCARD = 18
62
+ # Toggles the flushing of terminal output.
63
+ VDISCARD = 18
63
64
 
64
- # The ignore parity flag. The parameter SHOULD be 0 if this flag is FALSE,
65
- # and 1 if it is TRUE.
66
- IGNPAR = 30
65
+ # The ignore parity flag. The parameter SHOULD be 0 if this flag is FALSE,
66
+ # and 1 if it is TRUE.
67
+ IGNPAR = 30
67
68
 
68
- # Mark parity and framing errors.
69
- PARMRK = 31
69
+ # Mark parity and framing errors.
70
+ PARMRK = 31
70
71
 
71
- # Enable checking of parity errors.
72
- INPCK = 32
72
+ # Enable checking of parity errors.
73
+ INPCK = 32
73
74
 
74
- # Strip 8th bit off characters.
75
- ISTRIP = 33
75
+ # Strip 8th bit off characters.
76
+ ISTRIP = 33
76
77
 
77
- # Map NL into CR on input.
78
- INCLR = 34
78
+ # Map NL into CR on input.
79
+ INCLR = 34
79
80
 
80
- # Ignore CR on input.
81
- IGNCR = 35
81
+ # Ignore CR on input.
82
+ IGNCR = 35
82
83
 
83
- # Map CR to NL on input.
84
- ICRNL = 36
84
+ # Map CR to NL on input.
85
+ ICRNL = 36
85
86
 
86
- # Translate uppercase characters to lowercase.
87
- IUCLC = 37
87
+ # Translate uppercase characters to lowercase.
88
+ IUCLC = 37
88
89
 
89
- # Enable output flow control.
90
- IXON = 38
90
+ # Enable output flow control.
91
+ IXON = 38
91
92
 
92
- # Any char will restart after stop.
93
- IXANY = 39
93
+ # Any char will restart after stop.
94
+ IXANY = 39
94
95
 
95
- # Enable input flow control.
96
- IXOFF = 40
96
+ # Enable input flow control.
97
+ IXOFF = 40
97
98
 
98
- # Ring bell on input queue full.
99
- IMAXBEL = 41
99
+ # Ring bell on input queue full.
100
+ IMAXBEL = 41
100
101
 
101
- # Enable signals INTR, QUIT, [D]SUSP.
102
- ISIG = 50
102
+ # Enable signals INTR, QUIT, [D]SUSP.
103
+ ISIG = 50
103
104
 
104
- # Canonicalize input lines.
105
- ICANON = 51
105
+ # Canonicalize input lines.
106
+ ICANON = 51
106
107
 
107
- # Enable input and output of uppercase characters by preceding their
108
- # lowercase equivalents with "\".
109
- XCASE = 52
108
+ # Enable input and output of uppercase characters by preceding their
109
+ # lowercase equivalents with "\".
110
+ XCASE = 52
110
111
 
111
- # Enable echoing.
112
- ECHO = 53
112
+ # Enable echoing.
113
+ ECHO = 53
113
114
 
114
- # Visually erase chars.
115
- ECHOE = 54
115
+ # Visually erase chars.
116
+ ECHOE = 54
116
117
 
117
- # Kill character discards current line.
118
- ECHOK = 55
118
+ # Kill character discards current line.
119
+ ECHOK = 55
119
120
 
120
- # Echo NL even if ECHO is off.
121
- ECHONL = 56
121
+ # Echo NL even if ECHO is off.
122
+ ECHONL = 56
122
123
 
123
- # Don't flush after interrupt.
124
- NOFLSH = 57
124
+ # Don't flush after interrupt.
125
+ NOFLSH = 57
125
126
 
126
- # Stop background jobs from output.
127
- TOSTOP= 58
127
+ # Stop background jobs from output.
128
+ TOSTOP = 58
128
129
 
129
- # Enable extensions.
130
- IEXTEN = 59
130
+ # Enable extensions.
131
+ IEXTEN = 59
131
132
 
132
- # Echo control characters as ^(Char).
133
- ECHOCTL = 60
133
+ # Echo control characters as ^(Char).
134
+ ECHOCTL = 60
134
135
 
135
- # Visual erase for line kill.
136
- ECHOKE = 61
136
+ # Visual erase for line kill.
137
+ ECHOKE = 61
137
138
 
138
- # Retype pending input.
139
- PENDIN = 62
139
+ # Retype pending input.
140
+ PENDIN = 62
140
141
 
141
- # Enable output processing.
142
- OPOST = 70
142
+ # Enable output processing.
143
+ OPOST = 70
143
144
 
144
- # Convert lowercase to uppercase.
145
- OLCUC = 71
145
+ # Convert lowercase to uppercase.
146
+ OLCUC = 71
146
147
 
147
- # Map NL to CR-NL.
148
- ONLCR = 72
148
+ # Map NL to CR-NL.
149
+ ONLCR = 72
149
150
 
150
- # Translate carriage return to newline (output).
151
- OCRNL = 73
151
+ # Translate carriage return to newline (output).
152
+ OCRNL = 73
152
153
 
153
- # Translate newline to carriage return-newline (output).
154
- ONOCR = 74
154
+ # Translate newline to carriage return-newline (output).
155
+ ONOCR = 74
155
156
 
156
- # Newline performs a carriage return (output).
157
- ONLRET = 75
157
+ # Newline performs a carriage return (output).
158
+ ONLRET = 75
158
159
 
159
- # 7 bit mode.
160
- CS7 = 90
160
+ # 7 bit mode.
161
+ CS7 = 90
161
162
 
162
- # 8 bit mode.
163
- CS8 = 91
163
+ # 8 bit mode.
164
+ CS8 = 91
164
165
 
165
- # Parity enable.
166
- PARENB = 92
166
+ # Parity enable.
167
+ PARENB = 92
167
168
 
168
- # Odd parity, else even.
169
- PARODD = 93
169
+ # Odd parity, else even.
170
+ PARODD = 93
170
171
 
171
- # Specifies the input baud rate in bits per second.
172
- TTY_OP_ISPEED = 128
172
+ # Specifies the input baud rate in bits per second.
173
+ TTY_OP_ISPEED = 128
173
174
 
174
- # Specifies the output baud rate in bits per second.
175
- TTY_OP_OSPEED = 129
175
+ # Specifies the output baud rate in bits per second.
176
+ TTY_OP_OSPEED = 129
177
+ end
178
+ end
176
179
  end
177
-
178
- end; end; end
180
+ end
@@ -1,100 +1,106 @@
1
- module Net; module SSH
2
- # A general exception class, to act as the ancestor of all other Net::SSH
3
- # exception classes.
4
- class Exception < ::RuntimeError; end
5
-
6
- # This exception is raised when authentication fails (whether it be
7
- # public key authentication, password authentication, or whatever).
8
- class AuthenticationFailed < Exception; end
9
-
10
- # This exception is raised when a connection attempt times out.
11
- class ConnectionTimeout < Exception; end
12
-
13
- # This exception is raised when the remote host has disconnected
14
- # unexpectedly.
15
- class Disconnect < Exception; end
16
-
17
- # This exception is primarily used internally, but if you have a channel
18
- # request handler (see Net::SSH::Connection::Channel#on_request) that you
19
- # want to fail in such a way that the server knows it failed, you can
20
- # raise this exception in the handler and Net::SSH will translate that into
21
- # a "channel failure" message.
22
- class ChannelRequestFailed < Exception; end
23
-
24
- # This is exception is primarily used internally, but if you have a channel
25
- # open handler (see Net::SSH::Connection::Session#on_open_channel) and you
26
- # want to fail in such a way that the server knows it failed, you can
27
- # raise this exception in the handler and Net::SSH will translate that into
28
- # a "channel open failed" message.
29
- class ChannelOpenFailed < Exception
30
- attr_reader :code, :reason
31
-
32
- def initialize(code, reason)
33
- @code, @reason = code, reason
34
- super "#{reason} (#{code})"
35
- end
36
- end
37
-
38
- # Base class for host key exceptions. When rescuing this exception, you can
39
- # inspect the key fingerprint and, if you want to proceed anyway, simply call
40
- # the remember_host! method on the exception, and then retry.
41
- class HostKeyError < Exception
42
- # the callback to use when #remember_host! is called
43
- attr_writer :callback #:nodoc:
44
-
45
- # situation-specific data describing the host (see #host, #port, etc.)
46
- attr_writer :data #:nodoc:
47
-
48
- # An accessor for getting at the data that was used to look up the host
49
- # (see also #fingerprint, #host, #port, #ip, and #key).
50
- def [](key)
51
- @data && @data[key]
52
- end
53
-
54
- # Returns the fingerprint of the key for the host, which either was not
55
- # found or did not match.
56
- def fingerprint
57
- @data && @data[:fingerprint]
1
+ module Net
2
+ module SSH
3
+ # A general exception class, to act as the ancestor of all other Net::SSH
4
+ # exception classes.
5
+ class Exception < ::RuntimeError; end
6
+
7
+ # This exception is raised when authentication fails (whether it be
8
+ # public key authentication, password authentication, or whatever).
9
+ class AuthenticationFailed < Net::SSH::Exception; end
10
+
11
+ # This exception is raised when a connection attempt times out.
12
+ class ConnectionTimeout < Net::SSH::Exception; end
13
+
14
+ # This exception is raised when the remote host has disconnected
15
+ # unexpectedly.
16
+ class Disconnect < Net::SSH::Exception; end
17
+
18
+ # This exception is raised when the remote host has disconnected/
19
+ # timeouted unexpectedly.
20
+ class Timeout < Disconnect; end
21
+
22
+ # This exception is primarily used internally, but if you have a channel
23
+ # request handler (see Net::SSH::Connection::Channel#on_request) that you
24
+ # want to fail in such a way that the server knows it failed, you can
25
+ # raise this exception in the handler and Net::SSH will translate that into
26
+ # a "channel failure" message.
27
+ class ChannelRequestFailed < Net::SSH::Exception; end
28
+
29
+ # This is exception is primarily used internally, but if you have a channel
30
+ # open handler (see Net::SSH::Connection::Session#on_open_channel) and you
31
+ # want to fail in such a way that the server knows it failed, you can
32
+ # raise this exception in the handler and Net::SSH will translate that into
33
+ # a "channel open failed" message.
34
+ class ChannelOpenFailed < Net::SSH::Exception
35
+ attr_reader :code, :reason
36
+
37
+ def initialize(code, reason)
38
+ @code, @reason = code, reason
39
+ super "#{reason} (#{code})"
40
+ end
58
41
  end
59
42
 
60
- # Returns the host name for the remote host, as reported by the socket.
61
- def host
62
- @data && @data[:peer] && @data[:peer][:host]
43
+ # Base class for host key exceptions. When rescuing this exception, you can
44
+ # inspect the key fingerprint and, if you want to proceed anyway, simply call
45
+ # the remember_host! method on the exception, and then retry.
46
+ class HostKeyError < Net::SSH::Exception
47
+ # the callback to use when #remember_host! is called
48
+ attr_writer :callback # :nodoc:
49
+
50
+ # situation-specific data describing the host (see #host, #port, etc.)
51
+ attr_writer :data # :nodoc:
52
+
53
+ # An accessor for getting at the data that was used to look up the host
54
+ # (see also #fingerprint, #host, #port, #ip, and #key).
55
+ def [](key)
56
+ @data && @data[key]
57
+ end
58
+
59
+ # Returns the fingerprint of the key for the host, which either was not
60
+ # found or did not match.
61
+ def fingerprint
62
+ @data && @data[:fingerprint]
63
+ end
64
+
65
+ # Returns the host name for the remote host, as reported by the socket.
66
+ def host
67
+ @data && @data[:peer] && @data[:peer][:host]
68
+ end
69
+
70
+ # Returns the port number for the remote host, as reported by the socket.
71
+ def port
72
+ @data && @data[:peer] && @data[:peer][:port]
73
+ end
74
+
75
+ # Returns the IP address of the remote host, as reported by the socket.
76
+ def ip
77
+ @data && @data[:peer] && @data[:peer][:ip]
78
+ end
79
+
80
+ # Returns the key itself, as reported by the remote host.
81
+ def key
82
+ @data && @data[:key]
83
+ end
84
+
85
+ # Tell Net::SSH to record this host and key in the known hosts file, so
86
+ # that subsequent connections will remember them.
87
+ def remember_host!
88
+ @callback.call
89
+ end
63
90
  end
64
91
 
65
- # Returns the port number for the remote host, as reported by the socket.
66
- def port
67
- @data && @data[:peer] && @data[:peer][:port]
68
- end
69
-
70
- # Returns the IP address of the remote host, as reported by the socket.
71
- def ip
72
- @data && @data[:peer] && @data[:peer][:ip]
73
- end
74
-
75
- # Returns the key itself, as reported by the remote host.
76
- def key
77
- @data && @data[:key]
78
- end
79
-
80
- # Tell Net::SSH to record this host and key in the known hosts file, so
81
- # that subsequent connections will remember them.
82
- def remember_host!
83
- @callback.call
84
- end
92
+ # Raised when the cached key for a particular host does not match the
93
+ # key given by the host, which can be indicative of a man-in-the-middle
94
+ # attack. When rescuing this exception, you can inspect the key fingerprint
95
+ # and, if you want to proceed anyway, simply call the remember_host!
96
+ # method on the exception, and then retry.
97
+ class HostKeyMismatch < HostKeyError; end
98
+
99
+ # Raised when there is no cached key for a particular host, which probably
100
+ # means that the host has simply not been seen before.
101
+ # When rescuing this exception, you can inspect the key fingerprint and, if
102
+ # you want to proceed anyway, simply call the remember_host! method on the
103
+ # exception, and then retry.
104
+ class HostKeyUnknown < HostKeyError; end
85
105
  end
86
-
87
- # Raised when the cached key for a particular host does not match the
88
- # key given by the host, which can be indicative of a man-in-the-middle
89
- # attack. When rescuing this exception, you can inspect the key fingerprint
90
- # and, if you want to proceed anyway, simply call the remember_host!
91
- # method on the exception, and then retry.
92
- class HostKeyMismatch < HostKeyError; end
93
-
94
- # Raised when there is no cached key for a particular host, which probably
95
- # means that the host has simply not been seen before.
96
- # When rescuing this exception, you can inspect the key fingerprint and, if
97
- # you want to proceed anyway, simply call the remember_host! method on the
98
- # exception, and then retry.
99
- class HostKeyUnknown < HostKeyError; end
100
- end; end
106
+ end