f0bf08e10b637ec03811098dc7fcfe7a8c96ad8b
[u/mdw/putty] / doc / psftp.but
1 \define{versionidpsftp} \versionid $Id$
2
3 \C{psftp} Using PSFTP to transfer files securely
4
5 \i{PSFTP}, the PuTTY SFTP client, is a tool for transferring files
6 securely between computers using an SSH connection.
7
8 PSFTP differs from PSCP in the following ways:
9
10 \b PSCP should work on virtually every SSH server. PSFTP uses the
11 new SFTP protocol, which is a feature of SSH 2 only. (PSCP will also
12 use this protocol if it can, but there is an SSH 1 equivalent it can
13 fall back to if it cannot.)
14
15 \b PSFTP allows you to run an interactive file transfer session,
16 much like the Windows \c{ftp} program. You can list the contents of
17 directories, browse around the file system, issue multiple \c{get}
18 and \c{put} commands, and eventually log out. By contrast, PSCP is
19 designed to do a single file transfer operation and immediately
20 terminate.
21
22 \H{psftp-starting} Starting PSFTP
23
24 The usual way to start PSFTP is from a command prompt, much like
25 PSCP. To do this, it will need either to be on your \i{\c{PATH}} or
26 in your current directory. To add the directory containing PSFTP to
27 your \c{PATH} environment variable, type into the console window:
28
29 \c set PATH=C:\path\to\putty\directory;%PATH%
30
31 Unlike PSCP, however, PSFTP has no complex command-line syntax; you
32 just specify a host name and perhaps a user name:
33
34 \c psftp server.example.com
35
36 or perhaps
37
38 \c psftp fred@server.example.com
39
40 Alternatively, if you just type \c{psftp} on its own (or
41 double-click the PSFTP icon in the Windows GUI), you will see the
42 PSFTP prompt, and a message telling you PSFTP has not connected to
43 any server:
44
45 \c C:\>psftp
46 \c psftp: no hostname specified; use "open host.name" to connect
47 \c psftp>
48
49 At this point you can type \c{open server.example.com} or \c{open
50 fred@server.example.com} to start a session.
51
52 PSFTP accepts all the general command line options supported by the
53 PuTTY tools, except the ones which make no sense in a file transfer
54 utility. See \k{using-general-opts} for a description of these
55 options. (The ones not supported by PSFTP are clearly marked.)
56
57 PSFTP also supports some of its own options. The following sections
58 describe PSFTP's specific command-line options.
59
60 \S{psftp-option-b} \c{-b}: specify a file containing batch commands
61
62 In normal operation, PSFTP is an interactive program which displays
63 a command line and accepts commands from the keyboard.
64
65 If you need to do automated tasks with PSFTP, you would probably
66 prefer to specify a set of commands in advance and have them
67 executed automatically. The \c{-b} option allows you to do this. You
68 use it with a file name containing batch commands. For example, you
69 might create a file called \c{myscript.scr} containing lines like
70 this:
71
72 \c cd /home/ftp/users/jeff
73 \c del jam-old.tar.gz
74 \c ren jam.tar.gz jam-old.tar.gz
75 \c put jam.tar.gz
76 \c chmod a+r jam.tar.gz
77 \c quit
78
79 and then you could run the script by typing
80
81 \c psftp user@hostname -b myscript.scr
82
83 When you run a batch script in this way, PSFTP will abort the script
84 if any command fails to complete successfully. To change this
85 behaviour, you can add the \c{-be} option (\k{psftp-option-be}).
86
87 \S{psftp-option-bc} \c{-bc}: display batch commands as they are run
88
89 The \c{-bc} option alters what PSFTP displays while processing a
90 batch script specified with \c{-b}. With the \c{-bc} option, PSFTP
91 will display prompts and commands just as if the commands had been
92 typed at the keyboard. So instead of seeing this:
93
94 \c C:\>psftp fred@hostname -b batchfile
95 \c Sent username "fred"
96 \c Remote working directory is /home/fred
97 \c Listing directory /home/fred/lib
98 \c drwxrwsr-x 4 fred fred 1024 Sep 6 10:42 .
99 \c drwxr-sr-x 25 fred fred 2048 Dec 14 09:36 ..
100 \c drwxrwsr-x 3 fred fred 1024 Apr 17 2000 jed
101 \c lrwxrwxrwx 1 fred fred 24 Apr 17 2000 timber
102 \c drwxrwsr-x 2 fred fred 1024 Mar 13 2000 trn
103
104 you might see this:
105
106 \c C:\>psftp fred@hostname -bc -b batchfile
107 \c Sent username "fred"
108 \c Remote working directory is /home/fred
109 \c psftp> dir lib
110 \c Listing directory /home/fred/lib
111 \c drwxrwsr-x 4 fred fred 1024 Sep 6 10:42 .
112 \c drwxr-sr-x 25 fred fred 2048 Dec 14 09:36 ..
113 \c drwxrwsr-x 3 fred fred 1024 Apr 17 2000 jed
114 \c lrwxrwxrwx 1 fred fred 24 Apr 17 2000 timber
115 \c drwxrwsr-x 2 fred fred 1024 Mar 13 2000 trn
116 \c psftp> quit
117
118 \S{psftp-option-be} \c{-be}: continue batch processing on errors
119
120 When running a batch file, this additional option causes PSFTP to
121 continue processing even if a command fails to complete successfully.
122
123 You might want this to happen if you wanted to delete a file and
124 didn't care if it was already not present, for example.
125
126 \S{psftp-usage-options-batch}\c{-batch}: avoid interactive prompts
127
128 If you use the \c{-batch} option, PSFTP will never give an
129 interactive prompt while establishing the connection. If the
130 server's host key is invalid, for example (see \k{gs-hostkey}), then
131 the connection will simply be abandoned instead of asking you what
132 to do next.
133
134 This may help PSFTP's behaviour when it is used in automated
135 scripts: using \c{-batch}, if something goes wrong at connection
136 time, the batch job will fail rather than hang.
137
138 \H{psftp-commands} Running PSFTP
139
140 Once you have started your PSFTP session, you will see a \c{psftp>}
141 prompt. You can now type commands to perform file-transfer
142 functions. This section lists all the available commands.
143
144 \S{psftp-quoting} General quoting rules for PSFTP commands
145
146 Most PSFTP commands are considered by the PSFTP command interpreter
147 as a sequence of words, separated by spaces. For example, the
148 command \c{ren oldfilename newfilename} splits up into three words:
149 \c{ren} (the command name), \c{oldfilename} (the name of the file to
150 be renamed), and \c{newfilename} (the new name to give the file).
151
152 Sometimes you will need to specify file names that \e{contain}
153 spaces. In order to do this, you can surround the file name with
154 double quotes. This works equally well for local file names and
155 remote file names:
156
157 \c psftp> get "spacey file name.txt" "save it under this name.txt"
158
159 The double quotes themselves will not appear as part of the file
160 names; they are removed by PSFTP and their only effect is to stop
161 the spaces inside them from acting as word separators.
162
163 If you need to \e{use} a double quote (on some types of remote
164 system, such as Unix, you are allowed to use double quotes in file
165 names), you can do this by doubling it. This works both inside and
166 outside double quotes. For example, this command
167
168 \c psftp> ren ""this"" "a file with ""quotes"" in it"
169
170 will take a file whose current name is \c{"this"} (with a double
171 quote character at the beginning and the end) and rename it to a
172 file whose name is \c{a file with "quotes" in it}.
173
174 (The one exception to the PSFTP quoting rules is the \c{!} command,
175 which passes its command line straight to Windows without splitting
176 it up into words at all. See \k{psftp-cmd-pling}.)
177
178 \S{psftp-wildcards} Wildcards in PSFTP
179
180 Several commands in PSFTP support \q{wildcards} to select multiple
181 files.
182
183 For \e{local} file specifications (such as the first argument to
184 \c{put}), wildcard rules for the local operating system are used. For
185 instance, PSFTP running on Windows might require the use of \c{*.*}
186 where PSFTP on Unix would need \c{*}.
187
188 For \e{remote} file specifications (such as the first argument to
189 \c{get}), PSFTP uses a standard wildcard syntax (similar to POSIX
190 wildcards):
191
192 \b \c{*} matches any sequence of characters (including a zero-length
193 sequence).
194
195 \b \c{?} matches exactly one character.
196
197 \b \c{[abc]} matches exactly one character which can be \cw{a},
198 \cw{b}, or \cw{c}.
199
200 \lcont{
201
202 \c{[a-z]} matches any character in the range \cw{a} to \cw{z}.
203
204 \c{[^abc]} matches a single character that is \e{not} \cw{a}, \cw{b},
205 or \cw{c}.
206
207 Special cases: \c{[-a]} matches a literal hyphen (\cw{-}) or \cw{a};
208 \c{[^-a]} matches all other characters. \c{[a^]} matches a literal
209 caret (\cw{^}) or \cw{a}.
210
211 }
212
213 \b \c{\\} (backslash) before any of the above characters (or itself)
214 removes that character's special meaning.
215
216 A leading period (\cw{.}) on a filename is not treated specially,
217 unlike in some Unix contexts; \c{get *} will fetch all files, whether
218 or not they start with a leading period.
219
220 \S{psftp-cmd-open} The \c{open} command: start a session
221
222 If you started PSFTP by double-clicking in the GUI, or just by
223 typing \c{psftp} at the command line, you will need to open a
224 connection to an SFTP server before you can issue any other
225 commands (except \c{help} and \c{quit}).
226
227 To create a connection, type \c{open host.name}, or if you need to
228 specify a user name as well you can type \c{open user@host.name}.
229
230 Once you have issued this command, you will not be able to issue it
231 again, \e{even} if the command fails (for example, if you mistype
232 the host name or the connection times out). So if the connection is
233 not opened successfully, PSFTP will terminate immediately.
234
235 \S{psftp-cmd-quit} The \c{quit} command: end your session
236
237 When you have finished your session, type the command \c{quit} to
238 close the connection, terminate PSFTP and return to the command line
239 (or just close the PSFTP console window if you started it from the
240 GUI).
241
242 You can also use the \c{bye} and \c{exit} commands, which have
243 exactly the same effect.
244
245 \S{psftp-cmd-close} The \c{close} command: close your connection
246
247 If you just want to close the network connection but keep PSFTP
248 running, you can use the \c{close} command. You can then use the
249 \c{open} command to open a new connection.
250
251 \S{psftp-cmd-help} The \c{help} command: get quick online help
252
253 If you type \c{help}, PSFTP will give a short list of the available
254 commands.
255
256 If you type \c{help} with a command name - for example, \c{help get}
257 - then PSFTP will give a short piece of help on that particular
258 command.
259
260 \S{psftp-cmd-cd} The \c{cd} and \c{pwd} commands: changing the
261 remote working directory
262
263 PSFTP maintains a notion of your \q{working directory} on the
264 server. This is the default directory that other commands will
265 operate on. For example, if you type \c{get filename.dat} then PSFTP
266 will look for \c{filename.dat} in your remote working directory on
267 the server.
268
269 To change your remote working directory, use the \c{cd} command. If
270 you don't provide an argument, \c{cd} will return you to your home
271 directory on the server (more precisely, the remote directory you were
272 in at the start of the connection).
273
274 To display your current remote working directory, type \c{pwd}.
275
276 \S{psftp-cmd-lcd} The \c{lcd} and \c{lpwd} commands: changing the
277 local working directory
278
279 As well as having a working directory on the remote server, PSFTP
280 also has a working directory on your local machine (just like any
281 other Windows process). This is the default local directory that
282 other commands will operate on. For example, if you type \c{get
283 filename.dat} then PSFTP will save the resulting file as
284 \c{filename.dat} in your local working directory.
285
286 To change your local working directory, use the \c{lcd} command. To
287 display your current local working directory, type \c{lpwd}.
288
289 \S{psftp-cmd-get} The \c{get} command: fetch a file from the server
290
291 To download a file from the server and store it on your local PC,
292 you use the \c{get} command.
293
294 In its simplest form, you just use this with a file name:
295
296 \c get myfile.dat
297
298 If you want to store the file locally under a different name,
299 specify the local file name after the remote one:
300
301 \c get myfile.dat newname.dat
302
303 This will fetch the file on the server called \c{myfile.dat}, but
304 will save it to your local machine under the name \c{newname.dat}.
305
306 To fetch an entire directory recursively, you can use the \c{-r}
307 option:
308
309 \c get -r mydir
310 \c get -r mydir newname
311
312 (If you want to fetch a file whose name starts with a hyphen, you
313 may have to use the \c{--} special argument, which stops \c{get}
314 from interpreting anything as a switch after it. For example,
315 \cq{get -- -silly-name-}.)
316
317 \S{psftp-cmd-put} The \c{put} command: send a file to the server
318
319 To upload a file to the server from your local PC, you use the
320 \c{put} command.
321
322 In its simplest form, you just use this with a file name:
323
324 \c put myfile.dat
325
326 If you want to store the file remotely under a different name,
327 specify the remote file name after the local one:
328
329 \c put myfile.dat newname.dat
330
331 This will send the local file called \c{myfile.dat}, but will store
332 it on the server under the name \c{newname.dat}.
333
334 To send an entire directory recursively, you can use the \c{-r}
335 option:
336
337 \c put -r mydir
338 \c put -r mydir newname
339
340 (If you want to send a file whose name starts with a hyphen, you may
341 have to use the \c{--} special argument, which stops \c{put} from
342 interpreting anything as a switch after it. For example, \cq{put --
343 -silly-name-}.)
344
345 \S{psftp-cmd-mgetput} The \c{mget} and \c{mput} commands: fetch or
346 send multiple files
347
348 \c{mget} works almost exactly like \c{get}, except that it allows
349 you to specify more than one file to fetch at once. You can do this
350 in two ways:
351
352 \b by giving two or more explicit file names (\cq{mget file1.txt
353 file2.txt})
354
355 \b by using a wildcard (\cq{mget *.txt}).
356
357 Every argument to \c{mget} is treated as the name of a file to fetch
358 (unlike \c{get}, which will interpret at most one argument like
359 that, and a second argument will be treated as an alternative name
360 under which to store the retrieved file), or a wildcard expression
361 matching more than one file.
362
363 The \c{-r} and \c{--} options from \c{get} are also available with
364 \c{mget}.
365
366 \c{mput} is similar to \c{put}, with the same differences.
367
368 \S{psftp-cmd-regetput} The \c{reget} and \c{reput} commands:
369 resuming file transfers
370
371 If a file transfer fails half way through, and you end up with half
372 the file stored on your disk, you can resume the file transfer using
373 the \c{reget} and \c{reput} commands. These work exactly like the
374 \c{get} and \c{put} commands, but they check for the presence of the
375 half-written destination file and start transferring from where the
376 last attempt left off.
377
378 The syntax of \c{reget} and \c{reput} is exactly the same as the
379 syntax of \c{get} and \c{put}:
380
381 \c reget myfile.dat
382 \c reget myfile.dat newname.dat
383 \c reget -r mydir
384
385 These commands are intended mainly for resuming interrupted transfers.
386 They assume that the remote file or directory structure has not
387 changed in any way; if there have been changes, you may end up with
388 corrupted files. In particular, the \c{-r} option will not pick up
389 changes to files or directories already transferred in full.
390
391 \S{psftp-cmd-dir} The \c{dir} command: list remote files
392
393 To list the files in your remote working directory, just type
394 \c{dir}.
395
396 You can also list the contents of a different directory by typing
397 \c{dir} followed by the directory name:
398
399 \c dir /home/fred
400 \c dir sources
401
402 And you can list a subset of the contents of a directory by
403 providing a wildcard:
404
405 \c dir /home/fred/*.txt
406 \c dir sources/*.c
407
408 The \c{ls} command works exactly the same way as \c{dir}.
409
410 \S{psftp-cmd-chmod} The \c{chmod} command: change permissions on
411 remote files
412
413 PSFTP allows you to modify the file permissions on files and
414 directories on the server. You do this using the \c{chmod} command,
415 which works very much like the Unix \c{chmod} command.
416
417 The basic syntax is \c{chmod modes file}, where \c{modes} represents
418 a modification to the file permissions, and \c{file} is the filename
419 to modify. You can specify multiple files or wildcards. For example:
420
421 \c chmod go-rwx,u+w privatefile
422 \c chmod a+r public*
423 \c chmod 640 groupfile1 groupfile2
424
425 The \c{modes} parameter can be a set of octal digits in the Unix
426 style. (If you don't know what this means, you probably don't want
427 to be using it!) Alternatively, it can be a list of permission
428 modifications, separated by commas. Each modification consists of:
429
430 \b The people affected by the modification. This can be \c{u} (the
431 owning user), \c{g} (members of the owning group), or \c{o}
432 (everybody else - \q{others}), or some combination of those. It can
433 also be \c{a} (\q{all}) to affect everybody at once.
434
435 \b A \c{+} or \c{-} sign, indicating whether permissions are to be
436 added or removed.
437
438 \b The actual permissions being added or removed. These can be \c{r}
439 (permission to read the file), \c{w} (permission to write to the
440 file), and \c{x} (permission to execute the file, or in the case of
441 a directory, permission to access files within the directory).
442
443 So the above examples would do:
444
445 \b The first example: \c{go-rwx} removes read, write and execute
446 permissions for members of the owning group and everybody else (so
447 the only permissions left are the ones for the file owner). \c{u+w}
448 adds write permission for the file owner.
449
450 \b The second example: \c{a+r} adds read permission for everybody to
451 all files and directories starting with \q{public}.
452
453 In addition to all this, there are a few extra special cases for
454 Unix systems. On non-Unix systems these are unlikely to be useful:
455
456 \b You can specify \c{u+s} and \c{u-s} to add or remove the Unix
457 set-user-ID bit. This is typically only useful for special purposes;
458 refer to your Unix documentation if you're not sure about it.
459
460 \b You can specify \c{g+s} and \c{g-s} to add or remove the Unix
461 set-group-ID bit. On a file, this works similarly to the set-user-ID
462 bit (see your Unix documentation again); on a directory it ensures
463 that files created in the directory are accessible by members of the
464 group that owns the directory.
465
466 \b You can specify \c{+t} and \c{-t} to add or remove the Unix
467 \q{sticky bit}. When applied to a directory, this means that the
468 owner of a file in that directory can delete the file (whereas
469 normally only the owner of the \e{directory} would be allowed to).
470
471 \S{psftp-cmd-del} The \c{del} command: delete remote files
472
473 To delete a file on the server, type \c{del} and then the filename
474 or filenames:
475
476 \c del oldfile.dat
477 \c del file1.txt file2.txt
478 \c del *.o
479
480 Files will be deleted without further prompting, even if multiple files
481 are specified.
482
483 \c{del} will only delete files. You cannot use it to delete
484 directories; use \c{rmdir} for that.
485
486 The \c{rm} command works exactly the same way as \c{del}.
487
488 \S{psftp-cmd-mkdir} The \c{mkdir} command: create remote directories
489
490 To create a directory on the server, type \c{mkdir} and then the
491 directory name:
492
493 \c mkdir newstuff
494
495 You can specify multiple directories to create at once:
496
497 \c mkdir dir1 dir2 dir3
498
499 \S{psftp-cmd-rmdir} The \c{rmdir} command: remove remote directories
500
501 To remove a directory on the server, type \c{rmdir} and then the
502 directory name or names:
503
504 \c rmdir oldstuff
505 \c rmdir *.old ancient
506
507 Directories will be deleted without further prompting, even if
508 multiple directories are specified.
509
510 Most SFTP servers will probably refuse to remove a directory if the
511 directory has anything in it, so you will need to delete the
512 contents first.
513
514 \S{psftp-cmd-mv} The \c{mv} command: move and rename remote files
515
516 To rename a single file on the server, type \c{mv}, then the current
517 file name, and then the new file name:
518
519 \c mv oldfile newname
520
521 You can also move the file into a different directory and change the
522 name:
523
524 \c mv oldfile dir/newname
525
526 To move one or more files into an existing subdirectory, specify the
527 files (using wildcards if desired), and then the destination
528 directory:
529
530 \c mv file dir
531 \c mv file1 dir1/file2 dir2
532 \c mv *.c *.h ..
533
534 The \c{rename} and \c{ren} commands work exactly the same way as
535 \c{mv}.
536
537 \S{psftp-cmd-pling} The \c{!} command: run a local Windows command
538
539 You can run local Windows commands using the \c{!} command. This is
540 the only PSFTP command that is not subject to the command quoting
541 rules given in \k{psftp-quoting}. If any command line begins with
542 the \c{!} character, then the rest of the line will be passed
543 straight to Windows without further translation.
544
545 For example, if you want to move an existing copy of a file out of
546 the way before downloading an updated version, you might type:
547
548 \c psftp> !ren myfile.dat myfile.bak
549 \c psftp> get myfile.dat
550
551 using the Windows \c{ren} command to rename files on your local PC.
552
553 \H{psftp-pubkey} Using public key authentication with PSFTP
554
555 Like PuTTY, PSFTP can authenticate using a public key instead of a
556 password. There are three ways you can do this.
557
558 Firstly, PSFTP can use PuTTY saved sessions in place of hostnames.
559 So you might do this:
560
561 \b Run PuTTY, and create a PuTTY saved session (see
562 \k{config-saving}) which specifies your private key file (see
563 \k{config-ssh-privkey}). You will probably also want to specify a
564 username to log in as (see \k{config-username}).
565
566 \b In PSFTP, you can now use the name of the session instead of a
567 hostname: type \c{psftp sessionname}, where \c{sessionname} is
568 replaced by the name of your saved session.
569
570 Secondly, you can supply the name of a private key file on the command
571 line, with the \c{-i} option. See \k{using-cmdline-identity} for more
572 information.
573
574 Thirdly, PSFTP will attempt to authenticate using Pageant if Pageant
575 is running (see \k{pageant}). So you would do this:
576
577 \b Ensure Pageant is running, and has your private key stored in it.
578
579 \b Specify a user and host name to PSFTP as normal. PSFTP will
580 automatically detect Pageant and try to use the keys within it.
581
582 For more general information on public-key authentication, see
583 \k{pubkey}.