]> andersk Git - openssh.git/blame - PROTOCOL
- djm@cvs.openbsd.org 2008/06/28 07:25:07
[openssh.git] / PROTOCOL
CommitLineData
8be03682 1This documents OpenSSH's deviations and extensions to the published SSH
2protocol.
3
4Note that OpenSSH's sftp and sftp-server implement revision 3 of the SSH
5filexfer protocol described in:
6
7http://www.openssh.com/txt/draft-ietf-secsh-filexfer-02.txt
8
9Features from newer versions of the draft are not supported, unless
10explicitly implemented as extensions described below.
11
121. transport: Protocol 2 MAC algorithm "umac-64@openssh.com"
13
14This is a new transport-layer MAC method using the UMAC algorithm
15(rfc4418). This method is identical to the "umac-64" method documented
16in:
17
18http://www.openssh.com/txt/draft-miller-secsh-umac-01.txt
19
202. transport: Protocol 2 compression algorithm "zlib@openssh.com"
21
22This transport-layer compression method uses the zlib compression
23algorithm (identical to the "zlib" method in rfc4253), but delays the
24start of compression until after authentication has completed. This
25avoids exposing compression code to attacks from unauthenticated users.
26
27The method is documented in:
28
29http://www.openssh.com/txt/draft-miller-secsh-compression-delayed-00.txt
30
313. connection: Channel write close extension "eow@openssh.com"
32
33The SSH connection protocol (rfc4254) provides the SSH_MSG_CHANNEL_EOF
34message to allow an endpoint to signal its peer that it will send no
35more data over a channel. Unfortunately, there is no symmetric way for
36an endpoint to request that its peer should cease sending data to it
37while still keeping the channel open for the endpoint to send data to
38the peer.
39
40This is desirable, since it saves the transmission of data that would
41otherwise need to be discarded and it allows an endpoint to signal local
42processes of the condition, e.g. by closing the corresponding file
43descriptor.
44
45OpenSSH implements a channel extension message to perform this
46signalling: "eow@openssh.com" (End Of Write). This message is sent by an
47endpoint when the local output of a channel is closed or experiences a
48write error. The message is formatted as follows:
49
50 byte SSH_MSG_CHANNEL_REQUEST
51 uint32 recipient channel
52 string "eow@openssh.com"
53 boolean FALSE
54
55On receiving this message, the peer SHOULD cease sending data of
56the channel and MAY signal the process from which the channel data
57originates (e.g. by closing its read file descriptor).
58
59As with the symmetric SSH_MSG_CHANNEL_EOF message, the channel does
60remain open after a "eow@openssh.com" has been sent and more data may
61still be sent in the other direction. This message does not consume
62window space and may be sent even if no window space is available.
63
3f0444ca 644. connection: disallow additional sessions extension
65 "no-more-sessions@openssh.com"
66
67Most SSH connections will only ever request a single session, but a
68attacker may abuse a running ssh client to surreptitiously open
69additional sessions under their control. OpenSSH provides a global
70request "no-more-sessions@openssh.com" to mitigate this attack.
71
72When an OpenSSH client expects that it will never open another session
73(i.e. it has been started with connection multiplexing disabled), it
74will send the following global request:
75
76 byte SSH_MSG_GLOBAL_REQUEST
77 string "no-more-sessions@openssh.com"
78 char want-reply
79
80On receipt of such a message, an OpenSSH server will refuse to open
81future channels of type "session" and instead immediately abort the
82connection.
83
84Note that this is not a general defence against compromised clients
85(that is impossible), but it thwarts a simple attack.
86
9bcf03ce 875. connection: Tunnel forward extension "tun@openssh.com"
88
cda43f66 89OpenSSH supports layer 2 and layer 3 tunnelling via the "tun@openssh.com"
9bcf03ce 90channel type. This channel type supports forwarding of network packets
cda43f66 91with datagram boundaries intact between endpoints equipped with
9bcf03ce 92interfaces like the BSD tun(4) device. Tunnel forwarding channels are
93requested by the client with the following packet:
94
95 byte SSH_MSG_CHANNEL_OPEN
96 string "tun@openssh.com"
97 uint32 sender channel
98 uint32 initial window size
99 uint32 maximum packet size
100 uint32 tunnel mode
101 uint32 remote unit number
102
103The "tunnel mode" parameter specifies whether the tunnel should forward
104layer 2 frames or layer 3 packets. It may take one of the following values:
105
106 SSH_TUNMODE_POINTOPOINT 1 /* layer 3 packets */
107 SSH_TUNMODE_ETHERNET 2 /* layer 2 frames */
108
109The "tunnel unit number" specifies the remote interface number, or may
110be zero to allow the server to automatically chose an interface. A server
111that is not willing to open a client-specified unit should refuse the
112request with a SSH_MSG_CHANNEL_OPEN_FAILURE error. On successful open,
113the server should reply with SSH_MSG_CHANNEL_OPEN_SUCCESS.
114
115Once established the client and server may exchange packet or frames
116over the tunnel channel by encapsulating them in SSH protocol strings
117and sending them as channel data. This ensures that packet boundaries
118are kept intact. Specifically, packets are transmitted using normal
119SSH_MSG_CHANNEL_DATA packets:
120
121 byte SSH_MSG_CHANNEL_DATA
122 uint32 recipient channel
123 string data
124
125The contents of the "data" field for layer 3 packets is:
126
127 uint32 packet length
128 uint32 address family
129 byte[packet length - 4] packet data
130
131The "address family" field identifies the type of packet in the message.
132It may be one of:
133
134 SSH_TUN_AF_INET 2 /* IPv4 */
135 SSH_TUN_AF_INET6 24 /* IPv6 */
136
137The "packet data" field consists of the IPv4/IPv6 datagram itself
138without any link layer header.
139
140The contents of the "data" field for layer 3 packets is:
141
142 uint32 packet length
143 byte[packet length] frame
144
cda43f66 145The "frame" field contains an IEEE 802.3 Ethernet frame, including
9bcf03ce 146header.
147
1486. sftp: Reversal of arguments to SSH_FXP_SYMLINK
8be03682 149
150When OpenSSH's sftp-server was implemented, the order of the arguments
cda43f66 151to the SSH_FXP_SYMLINK method was inadvertently reversed. Unfortunately,
8be03682 152the reversal was not noticed until the server was widely deployed. Since
153fixing this to follow the specification would cause incompatibility, the
154current order was retained. For correct operation, clients should send
155SSH_FXP_SYMLINK as follows:
156
157 uint32 id
158 string targetpath
159 string linkpath
160
9bcf03ce 1617. sftp: Server extension announcement in SSH_FXP_VERSION
8be03682 162
163OpenSSH's sftp-server lists the extensions it supports using the
164standard extension announcement mechanism in the SSH_FXP_VERSION server
165hello packet:
166
167 uint32 3 /* protocol version */
168 string ext1-name
169 string ext1-version
170 string ext2-name
171 string ext2-version
172 ...
173 string extN-name
174 string extN-version
175
176Each extension reports its integer version number as an ASCII encoded
177string, e.g. "1". The version will be incremented if the extension is
178ever changed in an incompatible way. The server MAY advertise the same
179extension with multiple versions (though this is unlikely). Clients MUST
cda43f66 180check the version number before attempting to use the extension.
8be03682 181
9bcf03ce 1828. sftp: Extension request "posix-rename@openssh.com"
8be03682 183
184This operation provides a rename operation with POSIX semantics, which
185are different to those provided by the standard SSH_FXP_RENAME in
186draft-ietf-secsh-filexfer-02.txt. This request is implemented as a
187SSH_FXP_EXTENDED request with the following format:
188
189 uint32 id
190 string "posix-rename@openssh.com"
191 string oldpath
192 string newpath
193
194On receiving this request the server will perform the POSIX operation
195rename(oldpath, newpath) and will respond with a SSH_FXP_STATUS message.
196This extension is advertised in the SSH_FXP_VERSION hello with version
197"1".
198
9bcf03ce 1999. sftp: Extension requests "statvfs@openssh.com" and
8be03682 200 "fstatvfs@openssh.com"
201
202These requests correspond to the statvfs and fstatvfs POSIX system
203interfaces. The "statvfs@openssh.com" request operates on an explicit
204pathname, and is formatted as follows:
205
206 uint32 id
207 string "statvfs@openssh.com"
208 string path
209
cda43f66 210The "fstatvfs@openssh.com" operates on an open file handle:
8be03682 211
212 uint32 id
213 string "fstatvfs@openssh.com"
214 string handle
215
216These requests return a SSH_FXP_STATUS reply on failure. On success they
217return the following SSH_FXP_EXTENDED_REPLY reply:
218
219 uint32 id
f044f89e 220 uint64 f_bsize /* file system block size */
221 uint64 f_frsize /* fundamental fs block size */
8be03682 222 uint64 f_blocks /* number of blocks (unit f_frsize) */
223 uint64 f_bfree /* free blocks in file system */
224 uint64 f_bavail /* free blocks for non-root */
225 uint64 f_files /* total file inodes */
226 uint64 f_ffree /* free file inodes */
227 uint64 f_favail /* free file inodes for to non-root */
0ad258dc 228 uint64 f_fsid /* file system id */
f044f89e 229 uint64 f_flag /* bit mask of f_flag values */
230 uint64 f_namemax /* maximum filename length */
8be03682 231
232The values of the f_flag bitmask are as follows:
233
234 #define SSH_FXE_STATVFS_ST_RDONLY 0x1 /* read-only */
235 #define SSH_FXE_STATVFS_ST_NOSUID 0x2 /* no setuid */
236
0ad258dc 237This extension is advertised in the SSH_FXP_VERSION hello with version
238"2".
239
cda43f66 240$OpenBSD: PROTOCOL,v 1.8 2008/06/28 07:25:07 djm Exp $
This page took 0.079674 seconds and 5 git commands to generate.