net-ssh 3.2.0.rc2 → 7.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (204) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +2 -2
  3. data/.dockerignore +6 -0
  4. data/.github/config/rubocop_linter_action.yml +4 -0
  5. data/.github/workflows/ci-with-docker.yml +44 -0
  6. data/.github/workflows/ci.yml +87 -0
  7. data/.github/workflows/rubocop.yml +16 -0
  8. data/.gitignore +13 -0
  9. data/.rubocop.yml +22 -0
  10. data/.rubocop_todo.yml +1081 -0
  11. data/CHANGES.txt +228 -7
  12. data/Dockerfile +27 -0
  13. data/Dockerfile.openssl3 +17 -0
  14. data/Gemfile +13 -0
  15. data/Gemfile.noed25519 +12 -0
  16. data/ISSUE_TEMPLATE.md +30 -0
  17. data/Manifest +4 -5
  18. data/README.md +297 -0
  19. data/Rakefile +125 -74
  20. data/SECURITY.md +4 -0
  21. data/appveyor.yml +58 -0
  22. data/docker-compose.yml +23 -0
  23. data/lib/net/ssh/authentication/agent.rb +279 -18
  24. data/lib/net/ssh/authentication/certificate.rb +183 -0
  25. data/lib/net/ssh/authentication/constants.rb +17 -15
  26. data/lib/net/ssh/authentication/ed25519.rb +186 -0
  27. data/lib/net/ssh/authentication/ed25519_loader.rb +31 -0
  28. data/lib/net/ssh/authentication/key_manager.rb +86 -39
  29. data/lib/net/ssh/authentication/methods/abstract.rb +67 -48
  30. data/lib/net/ssh/authentication/methods/hostbased.rb +34 -37
  31. data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +13 -13
  32. data/lib/net/ssh/authentication/methods/none.rb +16 -19
  33. data/lib/net/ssh/authentication/methods/password.rb +27 -17
  34. data/lib/net/ssh/authentication/methods/publickey.rb +96 -55
  35. data/lib/net/ssh/authentication/pageant.rb +471 -367
  36. data/lib/net/ssh/authentication/pub_key_fingerprint.rb +43 -0
  37. data/lib/net/ssh/authentication/session.rb +131 -121
  38. data/lib/net/ssh/buffer.rb +399 -300
  39. data/lib/net/ssh/buffered_io.rb +154 -150
  40. data/lib/net/ssh/config.rb +308 -185
  41. data/lib/net/ssh/connection/channel.rb +635 -613
  42. data/lib/net/ssh/connection/constants.rb +29 -29
  43. data/lib/net/ssh/connection/event_loop.rb +123 -0
  44. data/lib/net/ssh/connection/keepalive.rb +55 -51
  45. data/lib/net/ssh/connection/session.rb +620 -551
  46. data/lib/net/ssh/connection/term.rb +125 -123
  47. data/lib/net/ssh/errors.rb +101 -99
  48. data/lib/net/ssh/key_factory.rb +197 -105
  49. data/lib/net/ssh/known_hosts.rb +214 -127
  50. data/lib/net/ssh/loggable.rb +50 -49
  51. data/lib/net/ssh/packet.rb +83 -79
  52. data/lib/net/ssh/prompt.rb +50 -81
  53. data/lib/net/ssh/proxy/command.rb +105 -90
  54. data/lib/net/ssh/proxy/errors.rb +12 -10
  55. data/lib/net/ssh/proxy/http.rb +82 -79
  56. data/lib/net/ssh/proxy/https.rb +50 -0
  57. data/lib/net/ssh/proxy/jump.rb +54 -0
  58. data/lib/net/ssh/proxy/socks4.rb +2 -6
  59. data/lib/net/ssh/proxy/socks5.rb +14 -17
  60. data/lib/net/ssh/service/forward.rb +370 -317
  61. data/lib/net/ssh/test/channel.rb +145 -136
  62. data/lib/net/ssh/test/extensions.rb +131 -110
  63. data/lib/net/ssh/test/kex.rb +34 -32
  64. data/lib/net/ssh/test/local_packet.rb +46 -44
  65. data/lib/net/ssh/test/packet.rb +89 -70
  66. data/lib/net/ssh/test/remote_packet.rb +32 -30
  67. data/lib/net/ssh/test/script.rb +156 -142
  68. data/lib/net/ssh/test/socket.rb +49 -48
  69. data/lib/net/ssh/test.rb +82 -77
  70. data/lib/net/ssh/transport/algorithms.rb +441 -360
  71. data/lib/net/ssh/transport/cipher_factory.rb +96 -98
  72. data/lib/net/ssh/transport/constants.rb +32 -24
  73. data/lib/net/ssh/transport/ctr.rb +42 -22
  74. data/lib/net/ssh/transport/hmac/abstract.rb +81 -63
  75. data/lib/net/ssh/transport/hmac/md5.rb +0 -2
  76. data/lib/net/ssh/transport/hmac/md5_96.rb +0 -2
  77. data/lib/net/ssh/transport/hmac/none.rb +0 -2
  78. data/lib/net/ssh/transport/hmac/ripemd160.rb +0 -2
  79. data/lib/net/ssh/transport/hmac/sha1.rb +0 -2
  80. data/lib/net/ssh/transport/hmac/sha1_96.rb +0 -2
  81. data/lib/net/ssh/transport/hmac/sha2_256.rb +7 -11
  82. data/lib/net/ssh/transport/hmac/sha2_256_96.rb +4 -8
  83. data/lib/net/ssh/transport/hmac/sha2_256_etm.rb +12 -0
  84. data/lib/net/ssh/transport/hmac/sha2_512.rb +6 -9
  85. data/lib/net/ssh/transport/hmac/sha2_512_96.rb +4 -8
  86. data/lib/net/ssh/transport/hmac/sha2_512_etm.rb +12 -0
  87. data/lib/net/ssh/transport/hmac.rb +14 -12
  88. data/lib/net/ssh/transport/identity_cipher.rb +54 -52
  89. data/lib/net/ssh/transport/kex/abstract.rb +130 -0
  90. data/lib/net/ssh/transport/kex/abstract5656.rb +72 -0
  91. data/lib/net/ssh/transport/kex/curve25519_sha256.rb +39 -0
  92. data/lib/net/ssh/transport/kex/curve25519_sha256_loader.rb +30 -0
  93. data/lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb +33 -40
  94. data/lib/net/ssh/transport/kex/diffie_hellman_group14_sha256.rb +11 -0
  95. data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +119 -213
  96. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +53 -61
  97. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb +5 -9
  98. data/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb +36 -90
  99. data/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb +18 -10
  100. data/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb +18 -10
  101. data/lib/net/ssh/transport/kex.rb +15 -12
  102. data/lib/net/ssh/transport/key_expander.rb +24 -20
  103. data/lib/net/ssh/transport/openssl.rb +161 -124
  104. data/lib/net/ssh/transport/packet_stream.rb +225 -185
  105. data/lib/net/ssh/transport/server_version.rb +55 -56
  106. data/lib/net/ssh/transport/session.rb +306 -255
  107. data/lib/net/ssh/transport/state.rb +178 -176
  108. data/lib/net/ssh/verifiers/accept_new.rb +33 -0
  109. data/lib/net/ssh/verifiers/accept_new_or_local_tunnel.rb +33 -0
  110. data/lib/net/ssh/verifiers/always.rb +58 -0
  111. data/lib/net/ssh/verifiers/never.rb +19 -0
  112. data/lib/net/ssh/version.rb +55 -53
  113. data/lib/net/ssh.rb +110 -47
  114. data/net-ssh-public_cert.pem +18 -18
  115. data/net-ssh.gemspec +36 -205
  116. data/support/ssh_tunnel_bug.rb +5 -5
  117. data.tar.gz.sig +0 -0
  118. metadata +153 -118
  119. metadata.gz.sig +0 -0
  120. data/.travis.yml +0 -18
  121. data/README.rdoc +0 -182
  122. data/lib/net/ssh/authentication/agent/java_pageant.rb +0 -85
  123. data/lib/net/ssh/authentication/agent/socket.rb +0 -178
  124. data/lib/net/ssh/ruby_compat.rb +0 -46
  125. data/lib/net/ssh/verifiers/lenient.rb +0 -30
  126. data/lib/net/ssh/verifiers/null.rb +0 -12
  127. data/lib/net/ssh/verifiers/secure.rb +0 -52
  128. data/lib/net/ssh/verifiers/strict.rb +0 -24
  129. data/setup.rb +0 -1585
  130. data/support/arcfour_check.rb +0 -20
  131. data/test/README.txt +0 -18
  132. data/test/authentication/methods/common.rb +0 -28
  133. data/test/authentication/methods/test_abstract.rb +0 -51
  134. data/test/authentication/methods/test_hostbased.rb +0 -114
  135. data/test/authentication/methods/test_keyboard_interactive.rb +0 -121
  136. data/test/authentication/methods/test_none.rb +0 -41
  137. data/test/authentication/methods/test_password.rb +0 -95
  138. data/test/authentication/methods/test_publickey.rb +0 -148
  139. data/test/authentication/test_agent.rb +0 -232
  140. data/test/authentication/test_key_manager.rb +0 -240
  141. data/test/authentication/test_session.rb +0 -107
  142. data/test/common.rb +0 -125
  143. data/test/configs/auth_off +0 -5
  144. data/test/configs/auth_on +0 -4
  145. data/test/configs/empty +0 -0
  146. data/test/configs/eqsign +0 -3
  147. data/test/configs/exact_match +0 -8
  148. data/test/configs/host_plus +0 -10
  149. data/test/configs/multihost +0 -4
  150. data/test/configs/negative_match +0 -6
  151. data/test/configs/nohost +0 -19
  152. data/test/configs/numeric_host +0 -4
  153. data/test/configs/proxy_remote_user +0 -2
  154. data/test/configs/send_env +0 -2
  155. data/test/configs/substitutes +0 -8
  156. data/test/configs/wild_cards +0 -14
  157. data/test/connection/test_channel.rb +0 -487
  158. data/test/connection/test_session.rb +0 -564
  159. data/test/integration/README.txt +0 -17
  160. data/test/integration/Vagrantfile +0 -12
  161. data/test/integration/common.rb +0 -63
  162. data/test/integration/playbook.yml +0 -56
  163. data/test/integration/test_forward.rb +0 -637
  164. data/test/integration/test_id_rsa_keys.rb +0 -96
  165. data/test/integration/test_proxy.rb +0 -93
  166. data/test/known_hosts/github +0 -1
  167. data/test/known_hosts/github_hash +0 -1
  168. data/test/manual/test_pageant.rb +0 -37
  169. data/test/start/test_connection.rb +0 -53
  170. data/test/start/test_options.rb +0 -57
  171. data/test/start/test_transport.rb +0 -28
  172. data/test/start/test_user_nil.rb +0 -27
  173. data/test/test_all.rb +0 -12
  174. data/test/test_buffer.rb +0 -433
  175. data/test/test_buffered_io.rb +0 -63
  176. data/test/test_config.rb +0 -268
  177. data/test/test_key_factory.rb +0 -191
  178. data/test/test_known_hosts.rb +0 -66
  179. data/test/transport/hmac/test_md5.rb +0 -41
  180. data/test/transport/hmac/test_md5_96.rb +0 -27
  181. data/test/transport/hmac/test_none.rb +0 -34
  182. data/test/transport/hmac/test_ripemd160.rb +0 -36
  183. data/test/transport/hmac/test_sha1.rb +0 -36
  184. data/test/transport/hmac/test_sha1_96.rb +0 -27
  185. data/test/transport/hmac/test_sha2_256.rb +0 -37
  186. data/test/transport/hmac/test_sha2_256_96.rb +0 -27
  187. data/test/transport/hmac/test_sha2_512.rb +0 -37
  188. data/test/transport/hmac/test_sha2_512_96.rb +0 -27
  189. data/test/transport/kex/test_diffie_hellman_group14_sha1.rb +0 -13
  190. data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +0 -150
  191. data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +0 -96
  192. data/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb +0 -19
  193. data/test/transport/kex/test_ecdh_sha2_nistp256.rb +0 -161
  194. data/test/transport/kex/test_ecdh_sha2_nistp384.rb +0 -38
  195. data/test/transport/kex/test_ecdh_sha2_nistp521.rb +0 -38
  196. data/test/transport/test_algorithms.rb +0 -328
  197. data/test/transport/test_cipher_factory.rb +0 -443
  198. data/test/transport/test_hmac.rb +0 -34
  199. data/test/transport/test_identity_cipher.rb +0 -40
  200. data/test/transport/test_packet_stream.rb +0 -1762
  201. data/test/transport/test_server_version.rb +0 -74
  202. data/test/transport/test_session.rb +0 -331
  203. data/test/transport/test_state.rb +0 -181
  204. data/test/verifiers/test_secure.rb +0 -40
@@ -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,104 +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 raised when the remote host has disconnected/
18
- # timeouted unexpectedly.
19
- class Timeout < Disconnect; end
20
-
21
- # This exception is primarily used internally, but if you have a channel
22
- # request handler (see Net::SSH::Connection::Channel#on_request) that you
23
- # want to fail in such a way that the server knows it failed, you can
24
- # raise this exception in the handler and Net::SSH will translate that into
25
- # a "channel failure" message.
26
- class ChannelRequestFailed < Exception; end
27
-
28
- # This is exception is primarily used internally, but if you have a channel
29
- # open handler (see Net::SSH::Connection::Session#on_open_channel) and you
30
- # want to fail in such a way that the server knows it failed, you can
31
- # raise this exception in the handler and Net::SSH will translate that into
32
- # a "channel open failed" message.
33
- class ChannelOpenFailed < Exception
34
- attr_reader :code, :reason
35
-
36
- def initialize(code, reason)
37
- @code, @reason = code, reason
38
- super "#{reason} (#{code})"
39
- end
40
- end
41
-
42
- # Base class for host key exceptions. When rescuing this exception, you can
43
- # inspect the key fingerprint and, if you want to proceed anyway, simply call
44
- # the remember_host! method on the exception, and then retry.
45
- class HostKeyError < Exception
46
- # the callback to use when #remember_host! is called
47
- attr_writer :callback #:nodoc:
48
-
49
- # situation-specific data describing the host (see #host, #port, etc.)
50
- attr_writer :data #:nodoc:
51
-
52
- # An accessor for getting at the data that was used to look up the host
53
- # (see also #fingerprint, #host, #port, #ip, and #key).
54
- def [](key)
55
- @data && @data[key]
56
- end
57
-
58
- # Returns the fingerprint of the key for the host, which either was not
59
- # found or did not match.
60
- def fingerprint
61
- @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
62
41
  end
63
42
 
64
- # Returns the host name for the remote host, as reported by the socket.
65
- def host
66
- @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
67
90
  end
68
91
 
69
- # Returns the port number for the remote host, as reported by the socket.
70
- def port
71
- @data && @data[:peer] && @data[:peer][:port]
72
- end
73
-
74
- # Returns the IP address of the remote host, as reported by the socket.
75
- def ip
76
- @data && @data[:peer] && @data[:peer][:ip]
77
- end
78
-
79
- # Returns the key itself, as reported by the remote host.
80
- def key
81
- @data && @data[:key]
82
- end
83
-
84
- # Tell Net::SSH to record this host and key in the known hosts file, so
85
- # that subsequent connections will remember them.
86
- def remember_host!
87
- @callback.call
88
- 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
89
105
  end
90
-
91
- # Raised when the cached key for a particular host does not match the
92
- # key given by the host, which can be indicative of a man-in-the-middle
93
- # attack. When rescuing this exception, you can inspect the key fingerprint
94
- # and, if you want to proceed anyway, simply call the remember_host!
95
- # method on the exception, and then retry.
96
- class HostKeyMismatch < HostKeyError; end
97
-
98
- # Raised when there is no cached key for a particular host, which probably
99
- # means that the host has simply not been seen before.
100
- # When rescuing this exception, you can inspect the key fingerprint and, if
101
- # you want to proceed anyway, simply call the remember_host! method on the
102
- # exception, and then retry.
103
- class HostKeyUnknown < HostKeyError; end
104
- end; end
106
+ end