]> code.delx.au - gnu-emacs/blob - doc/misc/tramp.texi
Merge from emacs--rel--22
[gnu-emacs] / doc / misc / tramp.texi
1 \input texinfo @c -*-texinfo-*-
2 @setfilename ../../info/tramp
3 @c %**start of header
4 @settitle TRAMP User Manual
5 @setchapternewpage odd
6 @c %**end of header
7
8 @c This is *so* much nicer :)
9 @footnotestyle end
10
11 @c In the Tramp CVS, the version number is auto-frobbed from
12 @c configure.ac, so you should edit that file and run
13 @c "autoconf && ./configure" to change the version number.
14
15 @c Additionally, flags are set with respect to the Emacs flavor; and
16 @c depending whether Tramp is packaged into (X)Emacs, or standalone.
17
18 @include trampver.texi
19
20 @c Macro for formatting a filename according to the repective syntax.
21 @c xxx and yyy are auxiliary macros in order to omit leading and
22 @c trailing whitespace. Not very elegant, but I don't know it better.
23
24 @macro xxx {one}@c
25 @set \one\@c
26 @end macro
27
28 @macro yyy {one, two}@c
29 @xxx{x\one\}@c
30 @ifclear x@c
31 \one\@w{}\two\@c
32 @end ifclear
33 @clear x\one\@c
34 @end macro
35
36 @macro trampfn {method, user, host, localname}@c
37 @value{prefix}@yyy{\method\,@value{postfixhop}}@yyy{\user\,@@}\host\@value{postfix}\localname\@c
38 @end macro
39
40 @copying
41 Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
42 2007, 2008 Free Software Foundation, Inc.
43
44 @quotation
45 Permission is granted to copy, distribute and/or modify this document
46 under the terms of the GNU Free Documentation License, Version 1.2 or
47 any later version published by the Free Software Foundation; with no
48 Invariant Sections, with the Front-Cover texts being ``A GNU
49 Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
50 license is included in the section entitled ``GNU Free Documentation
51 License'' in the Emacs manual.
52
53 (a) The FSF's Back-Cover Text is: ``You have the freedom to
54 copy and modify this GNU manual. Buying copies from the FSF
55 supports it in developing GNU and promoting software freedom.''
56
57 This document is part of a collection distributed under the GNU Free
58 Documentation License. If you want to distribute this document
59 separately from the collection, you can do so by adding a copy of the
60 license to the document, as described in section 6 of the license.
61 @end quotation
62 @end copying
63
64 @c Entries for @command{install-info} to use
65 @dircategory @value{emacsname}
66 @direntry
67 * TRAMP: (tramp). Transparent Remote Access, Multiple Protocol
68 @value{emacsname} remote file access via rsh and rcp.
69 @end direntry
70
71 @tex
72
73 @titlepage
74 @title @value{tramp} version @value{trampver} User Manual
75
76 @author by Daniel Pittman
77 @author based on documentation by Kai Gro@ss{}johann
78
79 @page
80 @insertcopying
81
82 @end titlepage
83 @page
84
85 @end tex
86
87 @ifnottex
88 @node Top, Overview, (dir), (dir)
89 @top @value{tramp} version @value{trampver} User Manual
90
91 This file documents @value{tramp} version @value{trampver}, a remote file
92 editing package for @value{emacsname}.
93
94 @value{tramp} stands for `Transparent Remote (file) Access, Multiple
95 Protocol'. This package provides remote file editing, similar to
96 @value{ftppackagename}.
97
98 The difference is that @value{ftppackagename} uses FTP to transfer
99 files between the local and the remote host, whereas @value{tramp} uses a
100 combination of @command{rsh} and @command{rcp} or other work-alike
101 programs, such as @command{ssh}/@command{scp}.
102
103 You can find the latest version of this document on the web at
104 @uref{http://www.gnu.org/software/tramp/}.
105
106 @c Pointer to the other Emacs flavor is necessary only in case of
107 @c standalone installation.
108 @ifset installchapter
109 The manual has been generated for @value{emacsname}.
110 @ifinfo
111 If you want to read the info pages for @value{emacsothername}, you
112 should read in @ref{Installation} how to create them.
113 @end ifinfo
114 @ifhtml
115 If you're using the other Emacs flavor, you should read the
116 @uref{@value{emacsotherfilename}, @value{emacsothername}} pages.
117 @end ifhtml
118 @end ifset
119
120 @ifhtml
121 @ifset jamanual
122 This manual is also available as a @uref{@value{japanesemanual},
123 Japanese translation}.
124 @end ifset
125
126 The latest release of @value{tramp} is available for
127 @uref{ftp://ftp.gnu.org/gnu/tramp/, download}, or you may see
128 @ref{Obtaining Tramp} for more details, including the CVS server
129 details.
130
131 @value{tramp} also has a @uref{http://savannah.gnu.org/projects/tramp/,
132 Savannah Project Page}.
133 @end ifhtml
134
135 There is a mailing list for @value{tramp}, available at
136 @email{tramp-devel@@gnu.org}, and archived at
137 @uref{http://lists.gnu.org/archive/html/tramp-devel/, the
138 @value{tramp} Mail Archive}.
139 @ifhtml
140 Older archives are located at
141 @uref{http://sourceforge.net/mailarchive/forum.php?forum=tramp-devel,
142 SourceForge Mail Archive} and
143 @uref{http://www.mail-archive.com/emacs-rcp@@ls6.cs.uni-dortmund.de/,
144 The Mail Archive}.
145 @c in HTML output, there's no new paragraph.
146 @*@*
147 @end ifhtml
148
149 @insertcopying
150
151 @end ifnottex
152
153 @menu
154 * Overview:: What @value{tramp} can and cannot do.
155
156 For the end user:
157
158 * Obtaining Tramp:: How to obtain @value{tramp}.
159 * History:: History of @value{tramp}.
160 @ifset installchapter
161 * Installation:: Installing @value{tramp} with your @value{emacsname}.
162 @end ifset
163 * Configuration:: Configuring @value{tramp} for use.
164 * Usage:: An overview of the operation of @value{tramp}.
165 * Bug Reports:: Reporting Bugs and Problems.
166 * Frequently Asked Questions:: Questions and answers from the mailing list.
167 * Function Index:: @value{tramp} functions.
168 * Variable Index:: User options and variables.
169 * Concept Index:: An item for each concept.
170
171 For the developer:
172
173 * Version Control:: The inner workings of remote version control.
174 * Files directories and localnames:: How file names, directories and localnames are mangled and managed.
175 * Traces and Profiles:: How to Customize Traces.
176 * Issues:: Debatable Issues and What Was Decided.
177
178 * GNU Free Documentation License:: The license for this documentation.
179
180 @detailmenu
181 --- The Detailed Node Listing ---
182 @c
183 @ifset installchapter
184 Installing @value{tramp} with your @value{emacsname}
185
186 * Installation parameters:: Parameters in order to control installation.
187 * Load paths:: How to plug-in @value{tramp} into your environment.
188 * Japanese manual:: Japanese manual.
189
190 @end ifset
191
192 Configuring @value{tramp} for use
193
194 * Connection types:: Types of connections made to remote machines.
195 * Inline methods:: Inline methods.
196 * External transfer methods:: External transfer methods.
197 @ifset emacsgw
198 * Gateway methods:: Gateway methods.
199 @end ifset
200 * Default Method:: Selecting a default method.
201 * Default User:: Selecting a default user.
202 * Default Host:: Selecting a default host.
203 * Multi-hops:: Connecting to a remote host using multiple hops.
204 * Customizing Methods:: Using Non-Standard Methods.
205 * Customizing Completion:: Selecting config files for user/host name completion.
206 * Password caching:: Reusing passwords for several connections.
207 * Connection caching:: Reusing connection related information.
208 * Remote Programs:: How @value{tramp} finds and uses programs on the remote machine.
209 * Remote shell setup:: Remote shell setup hints.
210 * Windows setup hints:: Issues with Cygwin ssh.
211 * Auto-save and Backup:: Auto-save and Backup.
212
213 Using @value{tramp}
214
215 * Filename Syntax:: @value{tramp} filename conventions.
216 * Alternative Syntax:: URL-like filename syntax.
217 * Filename completion:: Filename completion.
218 * Remote processes:: Integration with other @value{emacsname} packages.
219 * Cleanup remote connections:: Cleanup remote connections.
220
221 The inner workings of remote version control
222
223 * Version Controlled Files:: Determining if a file is under version control.
224 * Remote Commands:: Executing the version control commands on the remote machine.
225 * Changed workfiles:: Detecting if the working file has changed.
226 * Checking out files:: Bringing the workfile out of the repository.
227 * Miscellaneous Version Control:: Things related to Version Control that don't fit elsewhere.
228
229 Things related to Version Control that don't fit elsewhere
230
231 * Remote File Ownership:: How VC determines who owns a workfile.
232 * Back-end Versions:: How VC determines what release your RCS is.
233
234 How file names, directories and localnames are mangled and managed
235
236 * Localname deconstruction:: Breaking a localname into its components.
237 @ifset emacs
238 * External packages:: Integration with external Lisp packages.
239 @end ifset
240
241 @end detailmenu
242 @end menu
243
244 @node Overview
245 @chapter An overview of @value{tramp}
246 @cindex overview
247
248 After the installation of @value{tramp} into your @value{emacsname}, you
249 will be able to access files on remote machines as though they were
250 local. Access to the remote file system for editing files, version
251 control, and @code{dired} are transparently enabled.
252
253 Your access to the remote machine can be with the @command{rsh},
254 @command{rlogin}, @command{telnet} programs or with any similar
255 connection method. This connection must pass @acronym{ASCII}
256 successfully to be usable but need not be 8-bit clean.
257
258 The package provides support for @command{ssh} connections out of the
259 box, one of the more common uses of the package. This allows
260 relatively secure access to machines, especially if @command{ftp}
261 access is disabled.
262
263 Under Windows, @value{tramp} is integrated with the PuTTY package,
264 using the @command{plink} program.
265
266 The majority of activity carried out by @value{tramp} requires only that
267 the remote login is possible and is carried out at the terminal. In
268 order to access remote files @value{tramp} needs to transfer their content
269 to the local machine temporarily.
270
271 @value{tramp} can transfer files between the machines in a variety of ways.
272 The details are easy to select, depending on your needs and the
273 machines in question.
274
275 The fastest transfer methods for large files rely on a remote file
276 transfer package such as @command{rcp}, @command{scp}, @command{rsync}
277 or (under Windows) @command{pscp}.
278
279 If the remote copy methods are not suitable for you, @value{tramp} also
280 supports the use of encoded transfers directly through the shell.
281 This requires that the @command{mimencode} or @command{uuencode} tools
282 are available on the remote machine. These methods are generally
283 faster for small files.
284
285 @value{tramp} is still under active development and any problems you encounter,
286 trivial or major, should be reported to the @value{tramp} developers.
287 @xref{Bug Reports}.
288
289
290 @subsubheading Behind the scenes
291 @cindex behind the scenes
292 @cindex details of operation
293 @cindex how it works
294
295 This section tries to explain what goes on behind the scenes when you
296 access a remote file through @value{tramp}.
297
298 Suppose you type @kbd{C-x C-f} and enter part of an @value{tramp} file name,
299 then hit @kbd{@key{TAB}} for completion. Suppose further that this is
300 the first time that @value{tramp} is invoked for the host in question. Here's
301 what happens:
302
303 @itemize
304 @item
305 @value{tramp} discovers that it needs a connection to the host. So it
306 invokes @samp{telnet @var{host}} or @samp{rsh @var{host} -l
307 @var{user}} or a similar tool to connect to the remote host.
308 Communication with this process happens through an
309 @value{emacsname} buffer, that is, the output from the remote end
310 goes into a buffer.
311
312 @item
313 The remote host may prompt for a login name (for @command{telnet}).
314 The login name is given in the file name, so @value{tramp} sends the
315 login name and a newline.
316
317 @item
318 The remote host may prompt for a password or pass phrase (for
319 @command{rsh} or for @command{telnet} after sending the login name).
320 @value{tramp} displays the prompt in the minibuffer, asking you for the
321 password or pass phrase.
322
323 You enter the password or pass phrase. @value{tramp} sends it to the remote
324 host, followed by a newline.
325
326 @item
327 @value{tramp} now waits for the shell prompt or for a message that the login
328 failed.
329
330 If @value{tramp} sees neither of them after a certain period of time
331 (a minute, say), then it issues an error message saying that it
332 couldn't find the remote shell prompt and shows you what the remote
333 host has sent.
334
335 If @value{tramp} sees a @samp{login failed} message, it tells you so,
336 aborts the login attempt and allows you to try again.
337
338 @item
339 Suppose that the login was successful and @value{tramp} sees the shell prompt
340 from the remote host. Now @value{tramp} invokes @command{/bin/sh} because
341 Bourne shells and C shells have different command
342 syntaxes.@footnote{Invoking @command{/bin/sh} will fail if your login
343 shell doesn't recognize @samp{exec /bin/sh} as a valid command.
344 Maybe you use the Scheme shell @command{scsh}@dots{}}
345
346 After the Bourne shell has come up, @value{tramp} sends a few commands to
347 ensure a good working environment. It turns off echoing, it sets the
348 shell prompt, and a few other things.
349
350 @item
351 Now the remote shell is up and it good working order. Remember, what
352 was supposed to happen is that @value{tramp} tries to find out what files exist
353 on the remote host so that it can do filename completion.
354
355 So, @value{tramp} basically issues @command{cd} and @command{ls} commands and
356 also sometimes @command{echo} with globbing. Another command that is
357 often used is @command{test} to find out whether a file is writable or a
358 directory or the like. The output of each command is parsed for the
359 necessary operation.
360
361 @item
362 Suppose you are finished with filename completion, have entered @kbd{C-x
363 C-f}, a full file name and hit @kbd{@key{RET}}. Now comes the time to
364 transfer the file contents from the remote host to the local host so
365 that you can edit them.
366
367 See above for an explanation of how @value{tramp} transfers the file contents.
368
369 For inline transfers, @value{tramp} issues a command like @samp{mimencode -b
370 /path/to/remote/file}, waits until the output has accumulated in the
371 buffer that's used for communication, then decodes that output to
372 produce the file contents.
373
374 For out-of-band transfers, @value{tramp} issues a command like the following:
375 @example
376 rcp user@@host:/path/to/remote/file /tmp/tramp.4711
377 @end example
378 It then reads the local temporary file @file{/tmp/tramp.4711} into a
379 buffer and deletes the temporary file.
380
381 @item
382 You now edit the buffer contents, blithely unaware of what has happened
383 behind the scenes. (Unless you have read this section, that is.) When
384 you are finished, you type @kbd{C-x C-s} to save the buffer.
385
386 @item
387 Again, @value{tramp} transfers the file contents to the remote host either
388 inline or out-of-band. This is the reverse of what happens when reading
389 the file.
390 @end itemize
391
392 I hope this has provided you with a basic overview of what happens
393 behind the scenes when you open a file with @value{tramp}.
394
395
396 @c For the end user
397 @node Obtaining Tramp
398 @chapter Obtaining Tramp.
399 @cindex obtaining Tramp
400
401 @value{tramp} is freely available on the Internet and the latest
402 release may be downloaded from
403 @uref{ftp://ftp.gnu.org/gnu/tramp/}. This release includes the full
404 documentation and code for @value{tramp}, suitable for installation.
405 But GNU Emacs (22 or later) includes @value{tramp} already, and there
406 is a @value{tramp} package for XEmacs, as well. So maybe it is easier
407 to just use those. But if you want the bleeding edge, read
408 on@dots{...}
409
410 For the especially brave, @value{tramp} is available from CVS. The CVS
411 version is the latest version of the code and may contain incomplete
412 features or new issues. Use these versions at your own risk.
413
414 Instructions for obtaining the latest development version of @value{tramp}
415 from CVS can be found by going to the Savannah project page at the
416 following URL and then clicking on the CVS link in the navigation bar
417 at the top.
418
419 @noindent
420 @uref{http://savannah.gnu.org/projects/tramp/}
421
422 @noindent
423 Or follow the example session below:
424
425 @example
426 ] @strong{cd ~/@value{emacsdir}}
427 ] @strong{export CVS_RSH="ssh"}
428 ] @strong{cvs -z3 -d:ext:anoncvs@@savannah.gnu.org:/cvsroot/tramp co tramp}
429 @end example
430
431 @noindent
432 You should now have a directory @file{~/@value{emacsdir}/tramp}
433 containing the latest version of @value{tramp}. You can fetch the latest
434 updates from the repository by issuing the command:
435
436 @example
437 ] @strong{cd ~/@value{emacsdir}/tramp}
438 ] @strong{export CVS_RSH="ssh"}
439 ] @strong{cvs update -d}
440 @end example
441
442 @noindent
443 Once you've got updated files from the CVS repository, you need to run
444 @command{autoconf} in order to get an up-to-date @file{configure}
445 script:
446
447 @example
448 ] @strong{cd ~/@value{emacsdir}/tramp}
449 ] @strong{autoconf}
450 @end example
451
452 People who have no direct CVS access (maybe because sitting behind a
453 blocking firewall), can try the
454 @uref{http://savannah.gnu.org/cvs-backup/tramp-sources.tar.gz, Nightly
455 CVS Tree Tarball} instead of.
456
457
458 @node History
459 @chapter History of @value{tramp}
460 @cindex history
461 @cindex development history
462
463 Development was started end of November 1998. The package was called
464 @file{rssh.el}, back then. It only provided one method to access a
465 file, using @command{ssh} to log in to a remote host and using
466 @command{scp} to transfer the file contents. After a while, the name
467 was changed to @file{rcp.el}, and now it's @value{tramp}. Along the way,
468 many more methods for getting a remote shell and for transferring the
469 file contents were added. Support for VC was added.
470
471 The most recent addition of major features were the multi-hop methods
472 added in April 2000 and the unification of @value{tramp} and Ange-FTP
473 filenames in July 2002. In July 2004, multi-hop methods have been
474 replaced by proxy hosts. Running commands on remote hosts was
475 introduced in December 2005.
476 @ifset emacsgw
477 Support of gateways exists since April 2007.
478 @end ifset
479
480 In December 2001, @value{tramp} has been added to the XEmacs package
481 repository. Being part of the GNU Emacs repository happened in June
482 2002, the first release including @value{tramp} was GNU Emacs 22.1.
483
484 @value{tramp} is also a GNU/Linux Debian package since February 2001.
485
486
487 @c Installation chapter is necessary only in case of standalone
488 @c installation. Text taken from trampinst.texi.
489 @ifset installchapter
490 @include trampinst.texi
491 @end ifset
492
493 @node Configuration
494 @chapter Configuring @value{tramp} for use
495 @cindex configuration
496
497 @cindex default configuration
498 @value{tramp} is (normally) fully functional when it is initially
499 installed. It is initially configured to use the @command{scp}
500 program to connect to the remote host. So in the easiest case, you
501 just type @kbd{C-x C-f} and then enter the filename
502 @file{@trampfn{, user, machine, /path/to.file}}.
503
504 On some hosts, there are problems with opening a connection. These are
505 related to the behavior of the remote shell. See @xref{Remote shell
506 setup}, for details on this.
507
508 If you do not wish to use these commands to connect to the remote
509 host, you should change the default connection and transfer method
510 that @value{tramp} uses. There are several different methods that @value{tramp}
511 can use to connect to remote machines and transfer files
512 (@pxref{Connection types}).
513
514 If you don't know which method is right for you, see @xref{Default
515 Method}.
516
517
518 @menu
519 * Connection types:: Types of connections made to remote machines.
520 * Inline methods:: Inline methods.
521 * External transfer methods:: External transfer methods.
522 @ifset emacsgw
523 * Gateway methods:: Gateway methods.
524 @end ifset
525 * Default Method:: Selecting a default method.
526 Here we also try to help those who
527 don't have the foggiest which method
528 is right for them.
529 * Default User:: Selecting a default user.
530 * Default Host:: Selecting a default host.
531 * Multi-hops:: Connecting to a remote host using multiple hops.
532 * Customizing Methods:: Using Non-Standard Methods.
533 * Customizing Completion:: Selecting config files for user/host name completion.
534 * Password caching:: Reusing passwords for several connections.
535 * Connection caching:: Reusing connection related information.
536 * Remote Programs:: How @value{tramp} finds and uses programs on the remote machine.
537 * Remote shell setup:: Remote shell setup hints.
538 * Windows setup hints:: Issues with Cygwin ssh.
539 * Auto-save and Backup:: Auto-save and Backup.
540 @end menu
541
542
543 @node Connection types
544 @section Types of connections made to remote machines.
545 @cindex connection types, overview
546
547 There are two basic types of transfer methods, each with its own
548 advantages and limitations. Both types of connection make use of a
549 remote shell access program such as @command{rsh}, @command{ssh} or
550 @command{telnet} to connect to the remote machine.
551
552 This connection is used to perform many of the operations that @value{tramp}
553 requires to make the remote file system transparently accessible from
554 the local machine. It is only when visiting files that the methods
555 differ.
556
557 @cindex inline methods
558 @cindex external transfer methods
559 @cindex external methods
560 @cindex out-of-band methods
561 @cindex methods, inline
562 @cindex methods, external transfer
563 @cindex methods, out-of-band
564 Loading or saving a remote file requires that the content of the file
565 be transfered between the two machines. The content of the file can be
566 transfered over the same connection used to log in to the remote
567 machine or the file can be transfered through another connection using
568 a remote copy program such as @command{rcp}, @command{scp} or
569 @command{rsync}. The former are called @dfn{inline methods}, the
570 latter are called @dfn{out-of-band methods} or @dfn{external transfer
571 methods} (@dfn{external methods} for short).
572
573 The performance of the external transfer methods is generally better
574 than that of the inline methods, at least for large files. This is
575 caused by the need to encode and decode the data when transferring
576 inline.
577
578 The one exception to this rule are the @command{scp} based transfer
579 methods. While these methods do see better performance when actually
580 transferring files, the overhead of the cryptographic negotiation at
581 startup may drown out the improvement in file transfer times.
582
583 External transfer methods should be configured such a way that they
584 don't require a password (with @command{ssh-agent}, or such alike).
585 Modern @command{scp} implementations offer options to reuse existing
586 @command{ssh} connections, see method @command{scpc}. If it isn't
587 possible, you should consider @ref{Password caching}, otherwise you
588 will be prompted for a password every copy action.
589
590
591 @node Inline methods
592 @section Inline methods
593 @cindex inline methods
594 @cindex methods, inline
595
596 The inline methods in @value{tramp} are quite powerful and can work in
597 situations where you cannot use an external transfer program to connect.
598 Inline methods are the only methods that work when connecting to the
599 remote machine via telnet. (There are also strange inline methods which
600 allow you to transfer files between @emph{user identities} rather than
601 hosts, see below.)
602
603 These methods depend on the existence of a suitable encoding and
604 decoding command on remote machine. Locally, @value{tramp} may be able to
605 use features of @value{emacsname} to decode and encode the files or
606 it may require access to external commands to perform that task.
607
608 @cindex uuencode
609 @cindex mimencode
610 @cindex base-64 encoding
611 @value{tramp} checks the availability and usability of commands like
612 @command{mimencode} (part of the @command{metamail} package) or
613 @command{uuencode} on the remote host. The first reliable command
614 will be used. The search path can be customized, see @ref{Remote
615 Programs}.
616
617 If both commands aren't available on the remote host, @value{tramp}
618 transfers a small piece of Perl code to the remote host, and tries to
619 apply it for encoding and decoding.
620
621
622 @table @asis
623 @item @option{rsh}
624 @cindex method rsh
625 @cindex rsh method
626
627 Connect to the remote host with @command{rsh}. Due to the unsecure
628 connection it is recommended for very local host topology only.
629
630 On operating systems which provide the command @command{remsh} instead
631 of @command{rsh}, you can use the method @option{remsh}. This is true
632 for HP-UX or Cray UNICOS, for example.
633
634
635 @item @option{ssh}
636 @cindex method ssh
637 @cindex ssh method
638
639 Connect to the remote host with @command{ssh}. This is identical to
640 the previous option except that the @command{ssh} package is used,
641 making the connection more secure.
642
643 There are also two variants, @option{ssh1} and @option{ssh2}, that
644 call @samp{ssh -1} and @samp{ssh -2}, respectively. This way, you can
645 explicitly select whether you want to use the SSH protocol version 1
646 or 2 to connect to the remote host. (You can also specify in
647 @file{~/.ssh/config}, the SSH configuration file, which protocol
648 should be used, and use the regular @option{ssh} method.)
649
650 Two other variants, @option{ssh1_old} and @option{ssh2_old}, use the
651 @command{ssh1} and @command{ssh2} commands explicitly. If you don't
652 know what these are, you do not need these options.
653
654 All the methods based on @command{ssh} have an additional kludgy
655 feature: you can specify a host name which looks like @file{host#42}
656 (the real host name, then a hash sign, then a port number). This
657 means to connect to the given host but to also pass @code{-p 42} as
658 arguments to the @command{ssh} command.
659
660
661 @item @option{telnet}
662 @cindex method telnet
663 @cindex telnet method
664
665 Connect to the remote host with @command{telnet}. This is as unsecure
666 as the @option{rsh} method.
667
668
669 @item @option{su}
670 @cindex method su
671 @cindex su method
672
673 This method does not connect to a remote host at all, rather it uses
674 the @command{su} program to allow you to edit files as another user.
675 That means, the specified host name in the file name must be either
676 @samp{localhost} or the host name as returned by the function
677 @command{(system-name)}. For an exception of this rule see
678 @ref{Multi-hops}.
679
680
681 @item @option{sudo}
682 @cindex method sudo
683 @cindex sudo method
684
685 This is similar to the @option{su} method, but it uses @command{sudo}
686 rather than @command{su} to become a different user.
687
688 Note that @command{sudo} must be configured to allow you to start a
689 shell as the user. It would be nice if it was sufficient if
690 @command{ls} and @command{mimencode} were allowed, but that is not
691 easy to implement, so I haven't got around to it, yet.
692
693
694 @item @option{sshx}
695 @cindex method sshx
696 @cindex sshx method
697
698 As you would expect, this is similar to @option{ssh}, only a little
699 different. Whereas @option{ssh} opens a normal interactive shell on
700 the remote host, this option uses @samp{ssh -t -t @var{host} -l
701 @var{user} /bin/sh} to open a connection. This is useful for users
702 where the normal login shell is set up to ask them a number of
703 questions when logging in. This procedure avoids these questions, and
704 just gives @value{tramp} a more-or-less `standard' login shell to work
705 with.
706
707 Note that this procedure does not eliminate questions asked by
708 @command{ssh} itself. For example, @command{ssh} might ask ``Are you
709 sure you want to continue connecting?'' if the host key of the remote
710 host is not known. @value{tramp} does not know how to deal with such a
711 question (yet), therefore you will need to make sure that you can log
712 in without such questions.
713
714 This is also useful for Windows users where @command{ssh}, when
715 invoked from an @value{emacsname} buffer, tells them that it is not
716 allocating a pseudo tty. When this happens, the login shell is wont
717 to not print any shell prompt, which confuses @value{tramp} mightily.
718 For reasons unknown, some Windows ports for @command{ssh} require the
719 doubled @samp{-t} option.
720
721 This supports the @samp{-p} kludge.
722
723
724 @item @option{krlogin}
725 @cindex method krlogin
726 @cindex krlogin method
727 @cindex Kerberos (with krlogin method)
728
729 This method is also similar to @option{ssh}. It only uses the
730 @command{krlogin -x} command to log in to the remote host.
731
732
733 @item @option{plink}
734 @cindex method plink
735 @cindex plink method
736
737 This method is mostly interesting for Windows users using the PuTTY
738 implementation of SSH. It uses @samp{plink -ssh} to log in to the
739 remote host.
740
741 This supports the @samp{-P} kludge.
742
743 Additionally, the methods @option{plink1} and @option{plink2} are
744 provided, which call @samp{plink -1 -ssh} or @samp{plink -2 -ssh} in
745 order to use SSH protocol version 1 or 2 explicitly.
746
747 CCC: Do we have to connect to the remote host once from the command
748 line to accept the SSH key? Maybe this can be made automatic?
749
750 CCC: Say something about the first shell command failing. This might
751 be due to a wrong setting of @code{tramp-rsh-end-of-line}.
752
753
754 @item @option{plinkx}
755 @cindex method plinkx
756 @cindex plinkx method
757
758 Another method using PuTTY on Windows. Instead of host names, it
759 expects PuTTY session names, calling @samp{plink -load @var{session}
760 -t"}. User names are relevant only in case the corresponding session
761 hasn't defined a user name. Different port numbers must be defined in
762 the session.
763
764
765 @item @option{fish}
766 @cindex method fish
767 @cindex fish method
768
769 This is an experimental implementation of the fish protocol, known from
770 the GNU Midnight Commander or the KDE Konqueror. @value{tramp} expects
771 the fish server implementation from the KDE kioslave. That means, the
772 file @file{~/.fishsrv.pl} is expected to reside on the remote host.
773
774 The implementation lacks good performance. The code is offered anyway,
775 maybe somebody can improve the performance.
776
777 @end table
778
779
780 @node External transfer methods
781 @section External transfer methods
782 @cindex methods, external transfer
783 @cindex methods, out-of-band
784 @cindex external transfer methods
785 @cindex out-of-band methods
786
787 The external transfer methods operate through multiple channels, using
788 the remote shell connection for many actions while delegating file
789 transfers to an external transfer utility.
790
791 This saves the overhead of encoding and decoding that multiplexing the
792 transfer through the one connection has with the inline methods.
793
794 Since external transfer methods need their own overhead opening a new
795 channel, all files which are smaller than @var{tramp-copy-size-limit}
796 are still transferred with the corresponding inline method. It should
797 provide a fair trade-off between both approaches.
798
799 @table @asis
800 @item @option{rcp} --- @command{rsh} and @command{rcp}
801 @cindex method rcp
802 @cindex rcp method
803 @cindex rcp (with rcp method)
804 @cindex rsh (with rcp method)
805
806 This method uses the @command{rsh} and @command{rcp} commands to connect
807 to the remote machine and transfer files. This is probably the fastest
808 connection method available.
809
810 The alternative method @option{remcp} uses the @command{remsh} and
811 @command{rcp} commands. It should be applied on machines where
812 @command{remsh} is used instead of @command{rsh}.
813
814
815 @item @option{scp} --- @command{ssh} and @command{scp}
816 @cindex method scp
817 @cindex scp method
818 @cindex scp (with scp method)
819 @cindex ssh (with scp method)
820
821 Using @command{ssh} to connect to the remote host and @command{scp} to
822 transfer files between the machines is the best method for securely
823 connecting to a remote machine and accessing files.
824
825 The performance of this option is also quite good. It may be slower than
826 the inline methods when you often open and close small files however.
827 The cost of the cryptographic handshake at the start of an @command{scp}
828 session can begin to absorb the advantage that the lack of encoding and
829 decoding presents.
830
831 There are also two variants, @option{scp1} and @option{scp2}, that
832 call @samp{ssh -1} and @samp{ssh -2}, respectively. This way, you can
833 explicitly select whether you want to use the SSH protocol version 1
834 or 2 to connect to the remote host. (You can also specify in
835 @file{~/.ssh/config}, the SSH configuration file, which protocol
836 should be used, and use the regular @option{scp} method.)
837
838 Two other variants, @option{scp1_old} and @option{scp2_old}, use the
839 @command{ssh1} and @command{ssh2} commands explicitly. If you don't
840 know what these are, you do not need these options.
841
842 All the @command{ssh} based methods support the kludgy @samp{-p}
843 feature where you can specify a port number to connect to in the host
844 name. For example, the host name @file{host#42} tells @value{tramp} to
845 specify @samp{-p 42} in the argument list for @command{ssh}, and to
846 specify @samp{-P 42} in the argument list for @command{scp}.
847
848
849 @item @option{sftp} --- @command{ssh} and @command{sftp}
850 @cindex method sftp
851 @cindex sftp method
852 @cindex sftp (with sftp method)
853 @cindex ssh (with sftp method)
854
855 That is mostly the same method as @option{scp}, but using
856 @command{sftp} as transfer command. So the same remarks are valid.
857
858 This command does not work like @value{ftppackagename}, where
859 @command{ftp} is called interactively, and all commands are send from
860 within this session. Instead of, @command{ssh} is used for login.
861
862 This method supports the @samp{-p} hack.
863
864
865 @item @option{rsync} --- @command{ssh} and @command{rsync}
866 @cindex method rsync
867 @cindex rsync method
868 @cindex rsync (with rsync method)
869 @cindex ssh (with rsync method)
870
871 Using the @command{ssh} command to connect securely to the remote
872 machine and the @command{rsync} command to transfer files is almost
873 identical to the @option{scp} method.
874
875 While @command{rsync} performs much better than @command{scp} when
876 transferring files that exist on both hosts, this advantage is lost if
877 the file exists only on one side of the connection.
878
879 The @command{rsync} based method may be considerably faster than the
880 @command{rcp} based methods when writing to the remote system. Reading
881 files to the local machine is no faster than with a direct copy.
882
883 This method supports the @samp{-p} hack.
884
885
886 @item @option{scpx} --- @command{ssh} and @command{scp}
887 @cindex method scpx
888 @cindex scpx method
889 @cindex scp (with scpx method)
890 @cindex ssh (with scpx method)
891
892 As you would expect, this is similar to @option{scp}, only a little
893 different. Whereas @option{scp} opens a normal interactive shell on
894 the remote host, this option uses @samp{ssh -t -t @var{host} -l
895 @var{user} /bin/sh} to open a connection. This is useful for users
896 where the normal login shell is set up to ask them a number of
897 questions when logging in. This procedure avoids these questions, and
898 just gives @value{tramp} a more-or-less `standard' login shell to work
899 with.
900
901 This is also useful for Windows users where @command{ssh}, when
902 invoked from an @value{emacsname} buffer, tells them that it is not
903 allocating a pseudo tty. When this happens, the login shell is wont
904 to not print any shell prompt, which confuses @value{tramp} mightily.
905
906 This method supports the @samp{-p} hack.
907
908
909 @item @option{scpc} --- @command{ssh} and @command{scp}
910 @cindex method scpx
911 @cindex scpx method
912 @cindex scp (with scpx method)
913 @cindex ssh (with scpx method)
914
915 Newer versions of @option{ssh} (for example OpenSSH 4) offer an option
916 @option{ControlMaster}. This allows @option{scp} to reuse an existing
917 @option{ssh} channel, which increases performance.
918
919 Before you use this method, you shall check whether your @option{ssh}
920 implementation does support this option. Try from the command line
921
922 @example
923 ssh localhost -o ControlMaster=yes
924 @end example
925
926 This method supports the @samp{-p} hack.
927
928
929 @item @option{pscp} --- @command{plink} and @command{pscp}
930 @cindex method pscp
931 @cindex pscp method
932 @cindex pscp (with pscp method)
933 @cindex plink (with pscp method)
934 @cindex PuTTY (with pscp method)
935
936 This method is similar to @option{scp}, but it uses the
937 @command{plink} command to connect to the remote host, and it uses
938 @command{pscp} for transferring the files. These programs are part
939 of PuTTY, an SSH implementation for Windows.
940
941 This method supports the @samp{-P} hack.
942
943
944 @item @option{psftp} --- @command{plink} and @command{psftp}
945 @cindex method psftp
946 @cindex psftp method
947 @cindex psftp (with psftp method)
948 @cindex plink (with psftp method)
949 @cindex PuTTY (with psftp method)
950
951 As you would expect, this method is similar to @option{sftp}, but it
952 uses the @command{plink} command to connect to the remote host, and it
953 uses @command{psftp} for transferring the files. These programs are
954 part of PuTTY, an SSH implementation for Windows.
955
956 This method supports the @samp{-P} hack.
957
958
959 @item @option{fcp} --- @command{fsh} and @command{fcp}
960 @cindex method fcp
961 @cindex fcp method
962 @cindex fsh (with fcp method)
963 @cindex fcp (with fcp method)
964
965 This method is similar to @option{scp}, but it uses the @command{fsh}
966 command to connect to the remote host, and it uses @command{fcp} for
967 transferring the files. @command{fsh/fcp} are a front-end for
968 @command{ssh} which allow for reusing the same @command{ssh} session
969 for submitting several commands. This avoids the startup overhead of
970 @command{scp} (which has to establish a secure connection whenever it
971 is called). Note, however, that you can also use one of the inline
972 methods to achieve a similar effect.
973
974 This method uses the command @samp{fsh @var{host} -l @var{user}
975 /bin/sh -i} to establish the connection, it does not work to just say
976 @command{fsh @var{host} -l @var{user}}.
977
978 @cindex method fsh
979 @cindex fsh method
980
981 There is no inline method using @command{fsh} as the multiplexing
982 provided by the program is not very useful in our context. @value{tramp}
983 opens just one connection to the remote host and then keeps it open,
984 anyway.
985
986
987 @item @option{ftp}
988 @cindex method ftp
989 @cindex ftp method
990
991 This is not a native @value{tramp} method. Instead of, it forwards all
992 requests to @value{ftppackagename}.
993 @ifset xemacs
994 This works only for unified filenames, see @ref{Issues}.
995 @end ifset
996
997
998 @item @option{smb} --- @command{smbclient}
999 @cindex method smb
1000 @cindex smb method
1001
1002 This is another not natural @value{tramp} method. It uses the
1003 @command{smbclient} command on different Unices in order to connect to
1004 an SMB server. An SMB server might be a Samba (or CIFS) server on
1005 another UNIX host or, more interesting, a host running MS Windows. So
1006 far, it is tested towards MS Windows NT, MS Windows 2000, and MS
1007 Windows XP.
1008
1009 The first directory in the localname must be a share name on the remote
1010 host. Remember, that the @code{$} character in which default shares
1011 usually end, must be written @code{$$} due to environment variable
1012 substitution in file names. If no share name is given (i.e. remote
1013 directory @code{/}), all available shares are listed.
1014
1015 Since authorization is done on share level, you will be prompted
1016 always for a password if you access another share on the same host.
1017 This can be suppressed by @ref{Password caching}.
1018
1019 MS Windows uses for authorization both a user name and a domain name.
1020 Because of this, the @value{tramp} syntax has been extended: you can
1021 specify a user name which looks like @code{user%domain} (the real user
1022 name, then a percent sign, then the domain name). So, to connect to
1023 the machine @code{melancholia} as user @code{daniel} of the domain
1024 @code{BIZARRE}, and edit @file{.emacs} in the home directory (share
1025 @code{daniel$}) I would specify the filename @file{@trampfn{smb,
1026 daniel%BIZARRE, melancholia, /daniel$$/.emacs}}.
1027
1028 Depending on the Windows domain configuration, a Windows user might be
1029 considered as domain user per default. In order to connect as local
1030 user, the WINS name of that machine must be given as domain name.
1031 Usually, it is the machine name in capital letters. In the example
1032 above, the local user @code{daniel} would be specified as
1033 @file{@trampfn{smb, daniel%MELANCHOLIA, melancholia, /daniel$$/.emacs}}.
1034
1035 The domain name as well as the user name are optional. If no user
1036 name is specified at all, the anonymous user (without password
1037 prompting) is assumed. This is different from all other @value{tramp}
1038 methods, where in such a case the local user name is taken.
1039
1040 The @option{smb} method supports the @samp{-p} hack.
1041
1042 @strong{Please note:} If @value{emacsname} runs locally under MS
1043 Windows, this method isn't available. Instead of, you can use UNC
1044 file names like @file{//melancholia/daniel$$/.emacs}. The only
1045 disadvantage is that there's no possibility to specify another user
1046 name.
1047
1048 @end table
1049
1050
1051 @ifset emacsgw
1052 @node Gateway methods
1053 @section Gateway methods
1054 @cindex methods, gateway
1055 @cindex gateway methods
1056
1057 Gateway methods are not methods to access a remote host directly.
1058 These methods are intended to pass firewalls or proxy servers.
1059 Therefore, they can be used for proxy host declarations
1060 (@pxref{Multi-hops}) only.
1061
1062 A gateway method must come always along with a method who supports
1063 port setting (referred to as @samp{-p} kludge). This is because
1064 @value{tramp} targets the accompanied method to
1065 @file{localhost#random_port}, from where the firewall or proxy server
1066 is accessed to.
1067
1068 Gateway methods support user name and password declarations. These
1069 are used to authenticate towards the corresponding firewall or proxy
1070 server. They can be passed only if your friendly administrator has
1071 granted your access.
1072
1073 @table @asis
1074 @item @option{tunnel}
1075 @cindex method tunnel
1076 @cindex tunnel method
1077
1078 This method implements an HTTP tunnel via the @command{CONNECT}
1079 command (see RFC 2616, 2817). Any HTTP 1.1 compliant (proxy) server
1080 shall support this command.
1081
1082 As authentication method, only @option{Basic Authentication} (see RFC
1083 2617) is implemented so far. If no port number is given in the
1084 declaration, port @option{8080} is used for the proxy server.
1085
1086
1087 @item @option{socks}
1088 @cindex method socks
1089 @cindex socks method
1090
1091 The @command{socks} method provides access to SOCKSv5 servers (see
1092 RFC 1928). @option{Username/Password Authentication} according to RFC
1093 1929 is supported.
1094
1095 The default port number of the socks server is @option{1080}, if not
1096 specified otherwise.
1097
1098 @end table
1099 @end ifset
1100
1101
1102 @node Default Method
1103 @section Selecting a default method
1104 @cindex default method
1105
1106 @vindex tramp-default-method
1107 When you select an appropriate transfer method for your typical usage
1108 you should set the variable @code{tramp-default-method} to reflect that
1109 choice. This variable controls which method will be used when a method
1110 is not specified in the @value{tramp} file name. For example:
1111
1112 @lisp
1113 (setq tramp-default-method "ssh")
1114 @end lisp
1115
1116 @vindex tramp-default-method-alist
1117 You can also specify different methods for certain user/host
1118 combinations, via the variable @code{tramp-default-method-alist}. For
1119 example, the following two lines specify to use the @option{ssh}
1120 method for all user names matching @samp{john} and the @option{rsync}
1121 method for all host names matching @samp{lily}. The third line
1122 specifies to use the @option{su} method for the user @samp{root} on
1123 the machine @samp{localhost}.
1124
1125 @lisp
1126 (add-to-list 'tramp-default-method-alist '("" "john" "ssh"))
1127 (add-to-list 'tramp-default-method-alist '("lily" "" "rsync"))
1128 (add-to-list 'tramp-default-method-alist
1129 '("\\`localhost\\'" "\\`root\\'" "su"))
1130 @end lisp
1131
1132 @noindent
1133 See the documentation for the variable
1134 @code{tramp-default-method-alist} for more details.
1135
1136 External transfer methods are normally preferable to inline transfer
1137 methods, giving better performance.
1138
1139 @xref{Inline methods}.
1140 @xref{External transfer methods}.
1141
1142 Another consideration with the selection of transfer methods is the
1143 environment you will use them in and, especially when used over the
1144 Internet, the security implications of your preferred method.
1145
1146 The @option{rsh} and @option{telnet} methods send your password as
1147 plain text as you log in to the remote machine, as well as
1148 transferring the files in such a way that the content can easily be
1149 read from other machines.
1150
1151 If you need to connect to remote systems that are accessible from the
1152 Internet, you should give serious thought to using @option{ssh} based
1153 methods to connect. These provide a much higher level of security,
1154 making it a non-trivial exercise for someone to obtain your password
1155 or read the content of the files you are editing.
1156
1157
1158 @subsection Which method is the right one for me?
1159 @cindex choosing the right method
1160
1161 Given all of the above, you are probably thinking that this is all fine
1162 and good, but it's not helping you to choose a method! Right you are.
1163 As a developer, we don't want to boss our users around but give them
1164 maximum freedom instead. However, the reality is that some users would
1165 like to have some guidance, so here I'll try to give you this guidance
1166 without bossing you around. You tell me whether it works @dots{}
1167
1168 My suggestion is to use an inline method. For large files, out-of-band
1169 methods might be more efficient, but I guess that most people will want
1170 to edit mostly small files.
1171
1172 I guess that these days, most people can access a remote machine by
1173 using @command{ssh}. So I suggest that you use the @option{ssh}
1174 method. So, type @kbd{C-x C-f @trampfn{ssh, root, otherhost,
1175 /etc/motd} @key{RET}} to edit the @file{/etc/motd} file on the other
1176 host.
1177
1178 If you can't use @option{ssh} to log in to the remote host, then
1179 select a method that uses a program that works. For instance, Windows
1180 users might like the @option{plink} method which uses the PuTTY
1181 implementation of @command{ssh}. Or you use Kerberos and thus like
1182 @option{krlogin}.
1183
1184 For the special case of editing files on the local host as another
1185 user, see the @option{su} or @option{sudo} methods. They offer
1186 shortened syntax for the @samp{root} account, like
1187 @file{@trampfn{su, , , /etc/motd}}.
1188
1189 People who edit large files may want to consider @option{scpc} instead
1190 of @option{ssh}, or @option{pscp} instead of @option{plink}. These
1191 out-of-band methods are faster than inline methods for large files.
1192 Note, however, that out-of-band methods suffer from some limitations.
1193 Please try first whether you really get a noticeable speed advantage
1194 from using an out-of-band method! Maybe even for large files, inline
1195 methods are fast enough.
1196
1197
1198 @node Default User
1199 @section Selecting a default user
1200 @cindex default user
1201
1202 The user part of a @value{tramp} file name can be omitted. Usually,
1203 it is replaced by the user name you are logged in. Often, this is not
1204 what you want. A typical use of @value{tramp} might be to edit some
1205 files with root permissions on the local host. This case, you should
1206 set the variable @code{tramp-default-user} to reflect that choice.
1207 For example:
1208
1209 @lisp
1210 (setq tramp-default-user "root")
1211 @end lisp
1212
1213 @code{tramp-default-user} is regarded as obsolete, and will be removed
1214 soon.
1215
1216 @vindex tramp-default-user-alist
1217 You can also specify different users for certain method/host
1218 combinations, via the variable @code{tramp-default-user-alist}. For
1219 example, if you always have to use the user @samp{john} in the domain
1220 @samp{somewhere.else}, you can specify the following:
1221
1222 @lisp
1223 (add-to-list 'tramp-default-user-alist
1224 '("ssh" ".*\\.somewhere\\.else\\'" "john"))
1225 @end lisp
1226
1227 @noindent
1228 See the documentation for the variable
1229 @code{tramp-default-user-alist} for more details.
1230
1231 One trap to fall in must be known. If @value{tramp} finds a default
1232 user, this user will be passed always to the connection command as
1233 parameter (for example @samp{ssh here.somewhere.else -l john}. If you
1234 have specified another user for your command in its configuration
1235 files, @value{tramp} cannot know it, and the remote access will fail.
1236 If you have specified in the given example in @file{~/.ssh/config} the
1237 lines
1238
1239 @example
1240 Host here.somewhere.else
1241 User lily
1242 @end example
1243
1244 @noindent
1245 than you must discard selecting a default user by @value{tramp}. This
1246 will be done by setting it to @code{nil} (or @samp{lily}, likewise):
1247
1248 @lisp
1249 (add-to-list 'tramp-default-user-alist
1250 '("ssh" "\\`here\\.somewhere\\.else\\'" nil))
1251 @end lisp
1252
1253 The last entry in @code{tramp-default-user-alist} could be your
1254 default user you'll apply predominantly. You shall @emph{append} it
1255 to that list at the end:
1256
1257 @lisp
1258 (add-to-list 'tramp-default-user-alist '(nil nil "jonas") t)
1259 @end lisp
1260
1261
1262 @node Default Host
1263 @section Selecting a default host
1264 @cindex default host
1265
1266 @vindex tramp-default-host
1267 Finally, it is even possible to omit the host name part of a
1268 @value{tramp} file name. This case, the value of the variable
1269 @code{tramp-default-host} is used. Per default, it is initialized
1270 with the host name your local @value{emacsname} is running.
1271
1272 If you, for example, use @value{tramp} mainly to contact the host
1273 @samp{target} as user @samp{john}, you can specify:
1274
1275 @lisp
1276 (setq tramp-default-user "john"
1277 tramp-default-host "target")
1278 @end lisp
1279
1280 Then the simple file name @samp{@trampfn{ssh, , ,}} will connect you
1281 to John's home directory on target.
1282 @ifset emacs
1283 Note, however, that the most simplification @samp{/::} won't work,
1284 because @samp{/:} is the prefix for quoted file names.
1285 @end ifset
1286
1287
1288 @node Multi-hops
1289 @section Connecting to a remote host using multiple hops
1290 @cindex multi-hop
1291 @cindex proxy hosts
1292
1293 Sometimes, the methods described before are not sufficient. Sometimes,
1294 it is not possible to connect to a remote host using a simple command.
1295 For example, if you are in a secured network, you might have to log in
1296 to a `bastion host' first before you can connect to the outside world.
1297 Of course, the target host may also require a bastion host.
1298
1299 @vindex tramp-default-proxies-alist
1300 In order to specify such multiple hops, it is possible to define a proxy
1301 host to pass through, via the variable
1302 @code{tramp-default-proxies-alist}. This variable keeps a list of
1303 triples (@var{host} @var{user} @var{proxy}).
1304
1305 The first matching item specifies the proxy host to be passed for a
1306 file name located on a remote target matching @var{user}@@@var{host}.
1307 @var{host} and @var{user} are regular expressions or @code{nil}, which
1308 is interpreted as a regular expression which always matches.
1309
1310 @var{proxy} must be a Tramp filename which localname part is ignored.
1311 Method and user name on @var{proxy} are optional, which is interpreted
1312 with the default values.
1313 @ifset emacsgw
1314 The method must be an inline or gateway method (@pxref{Inline
1315 methods}, @pxref{Gateway methods}).
1316 @end ifset
1317 @ifclear emacsgw
1318 The method must be an inline method (@pxref{Inline methods}).
1319 @end ifclear
1320 If @var{proxy} is @code{nil}, no additional hop is required reaching
1321 @var{user}@@@var{host}.
1322
1323 If you, for example, must pass the host @samp{bastion.your.domain} as
1324 user @samp{bird} for any remote host which is not located in your local
1325 domain, you can set
1326
1327 @lisp
1328 (add-to-list 'tramp-default-proxies-alist
1329 '("\\." nil "@trampfn{ssh, bird, bastion.your.domain,}"))
1330 (add-to-list 'tramp-default-proxies-alist
1331 '("\\.your\\.domain\\'" nil nil))
1332 @end lisp
1333
1334 Please note the order of the code. @code{add-to-list} adds elements at the
1335 beginning of a list. Therefore, most relevant rules must be added last.
1336
1337 Proxy hosts can be cascaded. If there is another host called
1338 @samp{jump.your.domain}, which is the only one in your local domain who
1339 is allowed connecting @samp{bastion.your.domain}, you can add another
1340 rule:
1341
1342 @lisp
1343 (add-to-list 'tramp-default-proxies-alist
1344 '("\\`bastion\\.your\\.domain\\'"
1345 "\\`bird\\'"
1346 "@trampfn{ssh, , jump.your.domain,}"))
1347 @end lisp
1348
1349 @var{proxy} can contain the patterns @code{%h} or @code{%u}. These
1350 patterns are replaced by the strings matching @var{host} or
1351 @var{user}, respectively.
1352
1353 If you, for example, wants to work as @samp{root} on hosts in the
1354 domain @samp{your.domain}, but login as @samp{root} is disabled for
1355 non-local access, you might add the following rule:
1356
1357 @lisp
1358 (add-to-list 'tramp-default-proxies-alist
1359 '("\\.your\\.domain\\'" "\\`root\\'" "@trampfn{ssh, , %h,}"))
1360 @end lisp
1361
1362 Opening @file{@trampfn{sudo, , randomhost.your.domain,}} would connect
1363 first @samp{randomhost.your.domain} via @code{ssh} under your account
1364 name, and perform @code{sudo -u root} on that host afterwards. It is
1365 important to know that the given method is applied on the host which
1366 has been reached so far. @code{sudo -u root}, applied on your local
1367 host, wouldn't be useful here.
1368
1369 This is the recommended configuration to work as @samp{root} on remote
1370 Ubuntu hosts.
1371
1372 @ifset emacsgw
1373 Finally, @code{tramp-default-proxies-alist} can be used to pass
1374 firewalls or proxy servers. Imagine your local network has a host
1375 @samp{proxy.your.domain} which is used on port 3128 as HTTP proxy to
1376 the outer world. Your friendly administrator has granted you access
1377 under your user name to @samp{host.other.domain} on that proxy
1378 server.@footnote{HTTP tunnels are intended for secure SSL/TLS
1379 communication. Therefore, many proxy server restrict the tunnels to
1380 related target ports. You might need to run your ssh server on your
1381 target host @samp{host.other.domain} on such a port, like 443 (https).
1382 See @uref{http://savannah.gnu.org/maintenance/CvsFromBehindFirewall}
1383 for discussion of ethical issues.} You would need to add the
1384 following rule:
1385
1386 @lisp
1387 (add-to-list 'tramp-default-proxies-alist
1388 '("\\`host\\.other\\.domain\\'" nil
1389 "@trampfn{tunnel, , proxy.your.domain#3128,}"))
1390 @end lisp
1391
1392 Gateway methods can be declared as first hop only in a multiple hop
1393 chain.
1394 @end ifset
1395
1396
1397 @node Customizing Methods
1398 @section Using Non-Standard Methods
1399 @cindex customizing methods
1400 @cindex using non-standard methods
1401 @cindex create your own methods
1402
1403 There is a variable @code{tramp-methods} which you can change if the
1404 predefined methods don't seem right.
1405
1406 For the time being, I'll refer you to the Lisp documentation of that
1407 variable, accessible with @kbd{C-h v tramp-methods @key{RET}}.
1408
1409
1410 @node Customizing Completion
1411 @section Selecting config files for user/host name completion
1412 @cindex customizing completion
1413 @cindex selecting config files
1414 @vindex tramp-completion-function-alist
1415
1416 The variable @code{tramp-completion-function-alist} is intended to
1417 customize which files are taken into account for user and host name
1418 completion (@pxref{Filename completion}). For every method, it keeps
1419 a set of configuration files, accompanied by a Lisp function able to
1420 parse that file. Entries in @code{tramp-completion-function-alist}
1421 have the form (@var{method} @var{pair1} @var{pair2} ...).
1422
1423 Each @var{pair} is composed of (@var{function} @var{file}).
1424 @var{function} is responsible to extract user names and host names
1425 from @var{file} for completion. There are two functions which access
1426 this variable:
1427
1428 @defun tramp-get-completion-function method
1429 This function returns the list of completion functions for @var{method}.
1430
1431 Example:
1432 @example
1433 (tramp-get-completion-function "rsh")
1434
1435 @result{} ((tramp-parse-rhosts "/etc/hosts.equiv")
1436 (tramp-parse-rhosts "~/.rhosts"))
1437 @end example
1438 @end defun
1439
1440 @defun tramp-set-completion-function method function-list
1441 This function sets @var{function-list} as list of completion functions
1442 for @var{method}.
1443
1444 Example:
1445 @example
1446 (tramp-set-completion-function "ssh"
1447 '((tramp-parse-sconfig "/etc/ssh_config")
1448 (tramp-parse-sconfig "~/.ssh/config")))
1449
1450 @result{} ((tramp-parse-sconfig "/etc/ssh_config")
1451 (tramp-parse-sconfig "~/.ssh/config"))
1452 @end example
1453 @end defun
1454
1455 The following predefined functions parsing configuration files exist:
1456
1457 @table @asis
1458 @item @code{tramp-parse-rhosts}
1459 @findex tramp-parse-rhosts
1460
1461 This function parses files which are syntactical equivalent to
1462 @file{~/.rhosts}. It returns both host names and user names, if
1463 specified.
1464
1465 @item @code{tramp-parse-shosts}
1466 @findex tramp-parse-shosts
1467
1468 This function parses files which are syntactical equivalent to
1469 @file{~/.ssh/known_hosts}. Since there are no user names specified
1470 in such files, it can return host names only.
1471
1472 @item @code{tramp-parse-sconfig}
1473 @findex tramp-parse-shosts
1474
1475 This function returns the host nicknames defined by @code{Host} entries
1476 in @file{~/.ssh/config} style files.
1477
1478 @item @code{tramp-parse-shostkeys}
1479 @findex tramp-parse-shostkeys
1480
1481 SSH2 parsing of directories @file{/etc/ssh2/hostkeys/*} and
1482 @file{~/ssh2/hostkeys/*}. Hosts are coded in file names
1483 @file{hostkey_@var{portnumber}_@var{host-name}.pub}. User names
1484 are always @code{nil}.
1485
1486 @item @code{tramp-parse-sknownhosts}
1487 @findex tramp-parse-shostkeys
1488
1489 Another SSH2 style parsing of directories like
1490 @file{/etc/ssh2/knownhosts/*} and @file{~/ssh2/knownhosts/*}. This
1491 case, hosts names are coded in file names
1492 @file{@var{host-name}.@var{algorithm}.pub}. User names are always @code{nil}.
1493
1494 @item @code{tramp-parse-hosts}
1495 @findex tramp-parse-hosts
1496
1497 A function dedicated to @file{/etc/hosts} style files. It returns
1498 host names only.
1499
1500 @item @code{tramp-parse-passwd}
1501 @findex tramp-parse-passwd
1502
1503 A function which parses @file{/etc/passwd} like files. Obviously, it
1504 can return user names only.
1505
1506 @item @code{tramp-parse-netrc}
1507 @findex tramp-parse-netrc
1508
1509 Finally, a function which parses @file{~/.netrc} like files.
1510 @end table
1511
1512 If you want to keep your own data in a file, with your own structure,
1513 you might provide such a function as well. This function must meet
1514 the following conventions:
1515
1516 @defun my-tramp-parse file
1517 @var{file} must be either a file name on your host, or @code{nil}.
1518 The function must return a list of (@var{user} @var{host}), which are
1519 taken as candidates for user and host name completion.
1520
1521 Example:
1522 @example
1523 (my-tramp-parse "~/.my-tramp-hosts")
1524
1525 @result{} ((nil "toto") ("daniel" "melancholia"))
1526 @end example
1527 @end defun
1528
1529
1530 @node Password caching
1531 @section Reusing passwords for several connections.
1532 @cindex passwords
1533
1534 Sometimes it is necessary to connect to the same remote host several
1535 times. Reentering passwords again and again would be annoying, when
1536 the chosen method does not support access without password prompt
1537 through own configuration.
1538
1539 By default, @value{tramp} caches the passwords entered by you. They will
1540 be reused next time if a connection needs them for the same user name
1541 and host name, independently of the connection method.
1542
1543 @vindex password-cache-expiry
1544 Passwords are not saved permanently, that means the password caching
1545 is limited to the lifetime of your @value{emacsname} session. You
1546 can influence the lifetime of password caching by customizing the
1547 variable @code{password-cache-expiry}. The value is the number of
1548 seconds how long passwords are cached. Setting it to @code{nil}
1549 disables the expiration.
1550
1551 @vindex password-cache
1552 If you don't like this feature for security reasons, password caching
1553 can be disabled totally by customizing the variable
1554 @code{password-cache} (setting it to @code{nil}).
1555
1556 Implementation Note: password caching is based on the package
1557 @file{password.el} in No Gnus. For the time being, it is activated
1558 only when this package is seen in the @code{load-path} while loading
1559 @value{tramp}.
1560 @ifset installchapter
1561 If you don't use No Gnus, you can take @file{password.el} from the
1562 @value{tramp} @file{contrib} directory, see @ref{Installation
1563 parameters}.
1564 @end ifset
1565 It will be activated mandatory once No Gnus has found its way into
1566 @value{emacsname}.
1567
1568
1569 @node Connection caching
1570 @section Reusing connection related information.
1571 @cindex caching
1572
1573 @vindex tramp-persistency-file-name
1574 In order to reduce initial connection time, @value{tramp} stores
1575 connection related information persistently. The variable
1576 @code{tramp-persistency-file-name} keeps the file name where these
1577 information are written. Its default value is
1578 @ifset emacs
1579 @file{~/.emacs.d/tramp}.
1580 @end ifset
1581 @ifset xemacs
1582 @file{~/.xemacs/tramp}.
1583 @end ifset
1584 It is recommended to choose a local file name.
1585
1586 @value{tramp} reads this file during startup, and writes it when
1587 exiting @value{emacsname}. You can simply remove this file if
1588 @value{tramp} shall be urged to recompute these information next
1589 @value{emacsname} startup time.
1590
1591 Using such persistent information can be disabled by setting
1592 @code{tramp-persistency-file-name} to @code{nil}.
1593
1594 Once consequence of reusing connection related information is that
1595 @var{tramp} needs to distinguish hosts. If you, for example, run a
1596 local @code{sshd} on port 3001, which tunnels @command{ssh} to another
1597 host, you could access both @file{@trampfn{ssh, , localhost,}} and
1598 @file{@trampfn{ssh, , localhost#3001,}}. @var{tramp} would use the
1599 same host related information (like paths, Perl variants, etc) for
1600 both connections, although the information is valid only for one of
1601 them.
1602
1603 In order to avoid trouble, you must use another host name for one of
1604 the connections, like introducing a @option{Host} section in
1605 @file{~/.ssh/config} (@pxref{Frequently Asked Questions}) or applying
1606 multiple hops (@pxref{Multi-hops}).
1607
1608 When @value{tramp} detects a changed operating system version on a
1609 remote host (via the command @command{uname -sr}), it flushes all
1610 connection related information for this host, quits the execution, and
1611 displays a message like this:
1612
1613 @example
1614 Quit: "Connection reset, because remote host changed from `Linux
1615 2.6.22-13-generic' to `Linux 2.6.22-14-generic'"
1616 @end example
1617
1618 @noindent
1619 You can simply open the remote file again in such a case.
1620
1621
1622 @node Remote Programs
1623 @section How @value{tramp} finds and uses programs on the remote machine.
1624
1625 @value{tramp} depends on a number of programs on the remote host in order to
1626 function, including @command{ls}, @command{test}, @command{find} and
1627 @command{cat}.
1628
1629 In addition to these required tools, there are various tools that may be
1630 required based on the connection method. See @ref{Inline methods} and
1631 @ref{External transfer methods} for details on these.
1632
1633 Certain other tools, such as @command{perl} (or @command{perl5}) and
1634 @command{grep} will be used if they can be found. When they are
1635 available, they are used to improve the performance and accuracy of
1636 remote file access.
1637
1638 @vindex tramp-remote-path
1639 When @value{tramp} connects to the remote machine, it searches for the
1640 programs that it can use. The variable @code{tramp-remote-path}
1641 controls the directories searched on the remote machine.
1642
1643 By default, this is set to a reasonable set of defaults for most
1644 machines. The symbol @code{tramp-default-remote-path} is a place
1645 holder, it is replaced by the list of directories received via the
1646 command @command{getconf PATH} on your remote machine. For example,
1647 on GNU Debian this is @file{/bin:/usr/bin}, whereas on Solaris this is
1648 @file{/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin}. It is
1649 recommended to apply this symbol on top of @code{tramp-remote-path}.
1650
1651 It is possible, however, that your local (or remote ;) system
1652 administrator has put the tools you want in some obscure local
1653 directory.
1654
1655 In this case, you can still use them with @value{tramp}. You simply
1656 need to add code to your @file{.emacs} to add the directory to the
1657 remote path. This will then be searched by @value{tramp} when you
1658 connect and the software found.
1659
1660 To add a directory to the remote search path, you could use code such
1661 as:
1662
1663 @lisp
1664 @i{;; We load @value{tramp} to define the variable.}
1665 (require 'tramp)
1666 @i{;; We have @command{perl} in "/usr/local/perl/bin"}
1667 (add-to-list 'tramp-remote-path "/usr/local/perl/bin")
1668 @end lisp
1669
1670 @value{tramp} caches several information, like the Perl binary
1671 location. The changed remote search path wouldn't affect these
1672 settings. In order to force @value{tramp} to recompute these values,
1673 you must exit @value{emacsname}, remove your persistency file
1674 (@pxref{Connection caching}), and restart @value{emacsname}.
1675
1676
1677 @node Remote shell setup
1678 @section Remote shell setup hints
1679 @cindex remote shell setup
1680 @cindex @file{.profile} file
1681 @cindex @file{.login} file
1682 @cindex shell init files
1683
1684 As explained in the @ref{Overview} section, @value{tramp} connects to the
1685 remote host and talks to the shell it finds there. Of course, when you
1686 log in, the shell executes its init files. Suppose your init file
1687 requires you to enter the birth date of your mother; clearly @value{tramp}
1688 does not know this and hence fails to log you in to that host.
1689
1690 There are different possible strategies for pursuing this problem. One
1691 strategy is to enable @value{tramp} to deal with all possible situations.
1692 This is a losing battle, since it is not possible to deal with
1693 @emph{all} situations. The other strategy is to require you to set up
1694 the remote host such that it behaves like @value{tramp} expects. This might
1695 be inconvenient because you have to invest a lot of effort into shell
1696 setup before you can begin to use @value{tramp}.
1697
1698 The package, therefore, pursues a combined approach. It tries to
1699 figure out some of the more common setups, and only requires you to
1700 avoid really exotic stuff. For example, it looks through a list of
1701 directories to find some programs on the remote host. And also, it
1702 knows that it is not obvious how to check whether a file exists, and
1703 therefore it tries different possibilities. (On some hosts and
1704 shells, the command @command{test -e} does the trick, on some hosts
1705 the shell builtin doesn't work but the program @command{/usr/bin/test
1706 -e} or @command{/bin/test -e} works. And on still other hosts,
1707 @command{ls -d} is the right way to do this.)
1708
1709 Below you find a discussion of a few things that @value{tramp} does not deal
1710 with, and that you therefore have to set up correctly.
1711
1712 @table @asis
1713 @item @var{shell-prompt-pattern}
1714 @vindex shell-prompt-pattern
1715
1716 After logging in to the remote host, @value{tramp} has to wait for the remote
1717 shell startup to finish before it can send commands to the remote
1718 shell. The strategy here is to wait for the shell prompt. In order to
1719 recognize the shell prompt, the variable @code{shell-prompt-pattern} has
1720 to be set correctly to recognize the shell prompt on the remote host.
1721
1722 Note that @value{tramp} requires the match for @code{shell-prompt-pattern}
1723 to be at the end of the buffer. Many people have something like the
1724 following as the value for the variable: @code{"^[^>$][>$] *"}. Now
1725 suppose your shell prompt is @code{a <b> c $ }. In this case,
1726 @value{tramp} recognizes the @code{>} character as the end of the prompt,
1727 but it is not at the end of the buffer.
1728
1729 @item @var{tramp-shell-prompt-pattern}
1730 @vindex tramp-shell-prompt-pattern
1731
1732 This regular expression is used by @value{tramp} in the same way as
1733 @code{shell-prompt-pattern}, to match prompts from the remote shell.
1734 This second variable exists because the prompt from the remote shell
1735 might be different from the prompt from a local shell --- after all,
1736 the whole point of @value{tramp} is to log in to remote hosts as a
1737 different user. The default value of
1738 @code{tramp-shell-prompt-pattern} is the same as the default value of
1739 @code{shell-prompt-pattern}, which is reported to work well in many
1740 circumstances.
1741
1742 @item @var{tramp-password-prompt-regexp}
1743 @vindex tramp-password-prompt-regexp
1744 @vindex tramp-wrong-passwd-regexp
1745
1746 During login, @value{tramp} might be forced to enter a password or a
1747 passphrase. The difference between both is that a password is
1748 requested from the shell on the remote host, while a passphrase is
1749 needed for accessing local authentication information, like your ssh
1750 key.
1751
1752 @var{tramp-password-prompt-regexp} handles the detection of such
1753 requests for English environments. When you use another localization
1754 of your (local or remote) host, you might need to adapt this. Example:
1755
1756 @lisp
1757 (setq
1758 tramp-password-prompt-regexp
1759 (concat
1760 "^.*"
1761 (regexp-opt
1762 '("passphrase" "Passphrase"
1763 ;; English
1764 "password" "Password"
1765 ;; Deutsch
1766 "passwort" "Passwort"
1767 ;; Fran@,{c}ais
1768 "mot de passe" "Mot de passe") t)
1769 ".*: