# HG changeset patch # User Kai Grojohann # Date 1026655618 0 # Node ID a3acca116f2f393315261fe20384dab5adf942f6 # Parent f35f9986d2241dd70ee5962167b077398d2f47fd Comply with Texinfo coding standards. Suggestions by Eli. diff -r f35f9986d224 -r a3acca116f2f man/tramp.texi --- a/man/tramp.texi Sun Jul 14 10:14:28 2002 +0000 +++ b/man/tramp.texi Sun Jul 14 14:06:58 2002 +0000 @@ -10,6 +10,7 @@ @c Entries for @command{install-info} to use +@dircategory Emacs @direntry * TRAMP: (tramp). Transparent Remote Access, Multiple Protocol Emacs remote file access via rsh and rcp. @@ -21,36 +22,33 @@ @end macro @c Copying permissions, et al -@ifinfo +@copying This file documents @tramp{}, a remote file editing package for Emacs and XEmacs. Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries a copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -sections entitled ``Copying'' and ``GNU General Public License'' are -included exactly as in the original, and provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation -approved by the Free Software Foundation. -@end ifinfo + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU +Manual'', and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License'' in the Emacs manual. + +(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify +this GNU Manual, like GNU software. Copies published by the Free +Software Foundation raise funds for GNU development.'' + +This document is part of a collection distributed under the GNU Free +Documentation License. If you want to distribute this document +separately from the collection, you can do so by adding a copy of the +license to the document, as described in section 6 of the license. +@end quotation +@end copying + @tex @@ -61,37 +59,20 @@ @author based on documentation by Kai Gro@ss{}johann @page -@vskip 0pt plus 1filll -Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -sections entitled ``Copying'' and ``GNU General Public License'' are -included exactly as in the original, and provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation -approved by the Free Software Foundation. - @end titlepage @page @end tex @ifnottex -@node Top, Copying, (dir), (dir) +@node Top, Overview, (dir), (dir) @top @tramp{} User Manual @tramp{} stands for `Transparent Remote (file) Access, Multiple Protocol'. This package provides remote file editing, similar to -@cite{ange-ftp} and @cite{EFS}. +@cite{Ange-FTP} and @cite{EFS}. -The difference is that ange-ftp uses FTP to transfer files between the +The difference is that Ange-FTP uses FTP to transfer files between the local and the remote host, whereas @tramp{} uses a combination of @command{rsh} and @command{rcp} or other work-alike programs, such as @command{ssh}/@command{scp}. @@ -120,7 +101,6 @@ @end ifnottex @menu -* Copying:: @tramp{} Copying conditions. * Overview:: What @tramp{} can and cannot do. For the end user: @@ -177,68 +157,50 @@ @end detailmenu @end menu -@node Copying -@chapter @tramp{} Copying conditions - -Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. - -tramp.el is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. - -tramp.el is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. - -You should have received a copy of the GNU General Public License along -with GNU Emacs; see the file COPYING. If not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, -USA. - @node Overview @chapter An overview of @tramp +@cindex overview -After the installation of @tramp{} into your Emacs, you will be able to -access files on remote machines as though they were local. Access to the -remote file system for editing files, version control, and +After the installation of @tramp{} into your Emacs, you will be able +to access files on remote machines as though they were local. Access +to the remote file system for editing files, version control, and @command{dired} are transparently enabled. Your access to the remote machine can be with the @command{rsh}, @command{rlogin}, @command{telnet} programs or with any similar -connection method. This connection must pass ASCII successfully to be +connection method. This connection must pass ASCII successfully to be usable but need not be 8-bit clean. The package provides support for @command{ssh} connections out of the -box, one of the more common uses of the package. This allows relatively -secure access to machines, especially if @command{ftp} access is -disabled. +box, one of the more common uses of the package. This allows +relatively secure access to machines, especially if @command{ftp} +access is disabled. -The majority of activity carried out by @tramp{} requires only that the -remote login is possible and is carried out at the terminal. In order to -access remote files @tramp{} needs to transfer their content to the local -machine temporarily. +The majority of activity carried out by @tramp{} requires only that +the remote login is possible and is carried out at the terminal. In +order to access remote files @tramp{} needs to transfer their content +to the local machine temporarily. -@tramp{} can transfer files between the machines in a variety of ways. The -details are easy to select, depending on your needs and the machines in -question. +@tramp{} can transfer files between the machines in a variety of ways. +The details are easy to select, depending on your needs and the +machines in question. -The fastest transfer methods rely on a remote file transfer package such -as @command{rcp}, @command{scp} or @command{rsync}. The use of these -methods is only possible if the file copy command does not ask for a -password for the remote machine. +The fastest transfer methods (for large files) rely on a remote file +transfer package such as @command{rcp}, @command{scp} or +@command{rsync}. The use of these methods is only possible if the +file copy command does not ask for a password for the remote machine. If the remote copy methods are not suitable for you, @tramp{} also -supports the use of encoded transfers directly through the shell. This -requires that the @command{mimencode} or @command{uuencode} tools are -available on the remote machine. +supports the use of encoded transfers directly through the shell. +This requires that the @command{mimencode} or @command{uuencode} tools +are available on the remote machine. These methods are generally +faster for small files. -Within these limitations, @tramp{} is quite powerful. It is worth noting -that, as of the time of writing, it is far from a polished end-user -product. For a while yet you should expect to run into rough edges and -problems with the code now and then. +Within these limitations, @tramp{} is quite powerful. It is worth +noting that, as of the time of writing, it is far from a polished +end-user product. For a while yet you should expect to run into rough +edges and problems with the code now and then. It is finished enough that the developers use it for day to day work but the installation and setup can be a little difficult to master, as can @@ -250,6 +212,7 @@ @subsubheading Behind the scenes +@cindex behind the scenes This section tries to explain what goes on behind the scenes when you access a remote file through @tramp{}. @@ -261,11 +224,11 @@ @itemize @item -@tramp{} discovers that it needs a connection to the host. So it invokes -@command{telnet HOST} or @command{rsh HOST -l USER} or a similar tool to -connect to the remote host. Communication with this process happens -through an Emacs buffer, that is, the output from the remote end goes -into a buffer. +@tramp{} discovers that it needs a connection to the host. So it +invokes @samp{telnet @var{host}} or @samp{rsh @var{host} -l +@var{user}} or a similar tool to connect to the remote host. +Communication with this process happens through an Emacs buffer, that +is, the output from the remote end goes into a buffer. @item The remote host may prompt for a login name (for @command{telnet}). The @@ -297,7 +260,7 @@ from the remote host. Now @tramp{} invokes @command{/bin/sh} because Bourne shells and C shells have different command syntaxes.@footnote{Invoking @command{/bin/sh} will fail if your login -shell doesn't recognize @command{exec /bin/sh} as a valid command. +shell doesn't recognize @samp{exec /bin/sh} as a valid command. Maybe you use the Scheme shell @command{scsh}@dots{}} After the Bourne shell has come up, @tramp{} sends a few commands to @@ -323,12 +286,12 @@ See above for an explanation of how @tramp{} transfers the file contents. -For inline transfers, @tramp{} issues a command like @command{mimencode -b +For inline transfers, @tramp{} issues a command like @samp{mimencode -b /path/to/remote/file}, waits until the output has accumulated in the buffer that's used for communication, then decodes that output to produce the file contents. -For out-of-band transfers, @tramp{} issues a command like @command{rcp +For out-of-band transfers, @tramp{} issues a command like @samp{rcp user@@host:/path/to/remote/file /tmp/tramp.4711} and then reads the local temporary file @file{/tmp/tramp.4711} into a buffer and deletes the temporary file. @@ -352,14 +315,18 @@ @c For the end user @node Obtaining @tramp{} @chapter Obtaining @tramp{}. +@cindex obtaining Tramp @tramp{} is freely available on the Internet and the latest release may be downloaded from @uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/tramp.tar.gz}. This release includes the full documentation and code for @tramp{}, suitable -for installation. +for installation. But Emacs (21.4 or later) includes @tramp{} +already, and there is a @tramp{} package for XEmacs, as well. So +maybe it is easier to just use those. But if you want the bleeding +edge, read on@dots{...} -For the especially brave, @tramp{} is available from CVS. The CVS version +For the especially brave, @tramp{} is available from CVS. The CVS version is the latest version of the code and may contain incomplete features or new issues. Use these versions at your own risk. @@ -392,24 +359,30 @@ @node History @chapter History of @tramp{} +@cindex history +@cindex development history Development was started end of November 1998. The package was called -`rssh.el', back then. It only provided one method to access a file, -using @command{ssh} to log in to a remote host and using @command{scp} -to transfer the file contents. After a while, the name was changed to -`rcp.el', and now it's @tramp{}. Along the way, many more methods for -getting a remote shell and for transferring the file contents were -added. Support for VC was added. +@file{rssh.el}, back then. It only provided one method to access a +file, using @command{ssh} to log in to a remote host and using +@command{scp} to transfer the file contents. After a while, the name +was changed to @file{rcp.el}, and now it's @tramp{}. Along the way, +many more methods for getting a remote shell and for transferring the +file contents were added. Support for VC was added. -The most recent addition of a major feature was the multi-hop methods -added in April 2000. +The most recent addition of major features were the multi-hop methods +added in April 2000 and the unification of @tramp{} and Ange-FTP +filenames in July 2002. @node Installation @chapter Installing @tramp{} into Emacs or XEmacs +@cindex installation -Installing @tramp{} into your Emacs or XEmacs is a relatively easy -process, at least compared to rebuilding your machine from scratch. ;) +If you use the version that comes with your Emacs or the XEmacs +package, the following information is not necessary. Installing +@tramp{} into your Emacs or XEmacs is a relatively easy process, at +least compared to rebuilding your machine from scratch. ;) Seriously though, the installation should be a fairly simple matter. @@ -438,12 +411,12 @@ commands, don't dispare. You can still byte compile the @file{*.el} files by opening emacs in @command{dired} (@command{C-x d}) mode, at @file{~/tramp/lisp}. Mark the lisp -files with @command{m}, then press @command{B} to byte compile +files with @kbd{m}, then press @kbd{B} to byte compile your selections. Something similar can be done to create the info manual. Just cd to @file{~/emacs/tramp/texi} and load the @file{tramp.texi} -file in emacs. Then press @command{M-x makeinfo-buffer } +file in emacs. Then press @kbd{M-x makeinfo-buffer } to generate @file{tramp.info}. @end example @@ -467,11 +440,11 @@ On systems using `gnu' @command{install-info}, the @command{install-info} syntax is very direct and simple. One can cd to @file{~/emacs/tramp/texi} and type: - @command{install-info tramp.info dir} + @kbd{install-info tramp.info dir} and a @file{dir} file will be created with the @tramp{} entry. The info reader will know how to interpret it, but must be told where to find it (see below). If you want anything fancier -you'll need to look through @command{man install-info}. +you'll need to look through @kbd{man install-info}. Debian gnu/linux doesn't default to `gnu' @command{install-info} and uses its own version. This version does not create a @file{dir} file @@ -486,7 +459,7 @@ Once a @file{dir} file is in place, this command will make the entry. install-info --infodir=. tramp.info If you want it in a specific category - (see @command{man install-info} for further details) + (see @kbd{man install-info} for further details) @end example If the environment variable @env{INFOPATH} is set, add the directory @@ -501,7 +474,7 @@ @end itemize -For XEmacs users, the package @command{fsf-compat} must be installed. +For XEmacs users, the package @file{fsf-compat} must be installed. For details on package installation, see @ref{Packages, , ,xemacs}. @ifhtml (If the previous link doesn't work, try the XEmacs documentation at @@ -511,19 +484,24 @@ @node Configuration @chapter Configuring @tramp{} for use +@cindex configuration +@cindex default configuration @tramp{} is (normally) fully functional when it is initially -installed. It is initially configured to use the @command{rsh} and -@command{rcp} programs to connect to the remote host. +installed. It is initially configured to use the @command{sh} program +to connect to the remote host and to use base-64 encoding (on the +remote host, via @command{mimencode}, and on the local host via the +built-in support for base-64 encoding in Emacs). On some hosts, there are problems with opening a connection. These are related to the behavior of the remote shell. See @xref{Remote shell setup}, for details on this. -If you do not wish to use these commands to connect to the remote host, -you should change the default connection and transfer method that @tramp -uses. There are several different methods that @tramp{} can use to -connect to remote machines and transfer files (@pxref{Connection types}). +If you do not wish to use these commands to connect to the remote +host, you should change the default connection and transfer method +that @tramp uses. There are several different methods that @tramp{} +can use to connect to remote machines and transfer files +(@pxref{Connection types}). @menu @@ -541,9 +519,10 @@ @node Connection types @section Types of connections made to remote machines. +@cindex connection types, overview There are two basic types of transfer methods, each with its own -advantages and limitations. Both types of connection make use of a +advantages and limitations. Both types of connection make use of a remote shell access program such as @command{rsh}, @command{ssh} or @command{telnet} to connect to the remote machine. @@ -552,17 +531,26 @@ the local machine. It is only when visiting files that the methods differ. -Loading or saving a remote file requires that the content of the file be -transfered between the two machines. The content of the file can be -transfered over the same connection used to log in to the remote machine -or the file can be transfered through another connection using a remote -copy program such as @command{rcp}, @command{scp} or @command{rsync}. -The former are called @dfn{inline methods}, the latter are called -@dfn{external transfer methods}. +@cindex inline methods +@cindex external transfer methods +@cindex external methods +@cindex out-of-band methods +@cindex methods, inline +@cindex methods, external transfer +@cindex methods, out-of-band +Loading or saving a remote file requires that the content of the file +be transfered between the two machines. The content of the file can be +transfered over the same connection used to log in to the remote +machine or the file can be transfered through another connection using +a remote copy program such as @command{rcp}, @command{scp} or +@command{rsync}. The former are called @dfn{inline methods}, the +latter are called @dfn{out-of-band methods} or @dfn{external transfer +methods} (@dfn{external methods} for short). The performance of the external transfer methods is generally better -than that of the inline methods. This is caused by the need to encode -and decode the data when transferring inline. +than that of the inline methods, at least for large files. This is +caused by the need to encode and decode the data when transferring +inline. The one exception to this rule are the @command{scp} based transfer methods. While these methods do see better performance when actually @@ -574,6 +562,8 @@ If you cannot perform remote copies without a password, you will need to use an inline transfer method to work with @tramp{}. +@cindex multi-hop methods +@cindex methods, multi-hop A variant of the inline methods are the @dfn{multi-hop methods}. These methods allow you to connect a remote host using a number `hops', each of which connects to a different host. This is useful if you are @@ -583,6 +573,8 @@ @node Inline methods @section Inline methods +@cindex inline methods +@cindex methods, inline The inline methods in @tramp{} are quite powerful and can work in situations where you cannot use an external transfer program to connect. @@ -592,23 +584,29 @@ hosts, see below.) These methods depend on the existence of a suitable encoding and -decoding command on remote machine. Locally, @tramp{} may be able to use +decoding command on remote machine. Locally, @tramp{} may be able to use features of Emacs to decode and encode the files or it may require access to external commands to perform that task. -@tramp{} supports the use of @command{uuencode} to transfer files. This is -@emph{not} recommended. The @command{uuencode} and @command{uudecode} -commands are not well standardized and may not function correctly or at -all on some machines, notably AIX and IRIX. These systems do not work -with @command{uuencode} at all. (But do see the note about AIX in the -documentation for @var{tramp-methods}.) +@cindex uuencode +@tramp{} supports the use of @command{uuencode} to transfer files. +This is @emph{not} recommended. The @command{uuencode} and +@command{uudecode} commands are not well standardized and may not +function correctly or at all on some machines, notably AIX and IRIX. +These systems do not work with @command{uuencode} at all. (But do see +the note about AIX in the documentation for @var{tramp-methods}.) +@cindex mimencode +@cindex base-64 encoding In summary, if possible use the @command{mimencode} methods to transfer the data base64 encoded. This has the advantage of using a built-in command in every modern Emacs, improving performance. -@itemize +@table @asis @item @option{rm} --- @command{rsh} with @command{mimencode} +@cindex method rm +@cindex rm method +@cindex method using rsh Connect to the remote host with @command{rsh} and use base64 encoding to transfer files between the machines. @@ -619,6 +617,12 @@ @item @option{sm} --- @command{ssh} with @command{mimencode} +@cindex method sm +@cindex sm method +@cindex method using ssh +@cindex ssh +@cindex mimencode +@cindex base-64 encoding Connect to the remote host with @command{ssh} and use base64 encoding to transfer files between the machines. @@ -638,6 +642,12 @@ @item @option{tm} --- @command{telnet} with @command{mimencode} +@cindex method tm +@cindex tm method +@cindex method using telnet +@cindex telnet +@cindex mimencode +@cindex base-64 encoding Connect to the remote host with @command{telnet} and use base64 encoding to transfer files between the machines. @@ -647,6 +657,11 @@ @item @option{ru} --- @command{rsh} with @command{uuencode} +@cindex method ru +@cindex ru method +@cindex method using rsh +@cindex rsh +@cindex uuencode Connect to the remote host with @command{rsh} and use the @command{uuencode} and @command{uudecode} commands to transfer files @@ -654,6 +669,11 @@ @item @option{su} --- @command{ssh} with @command{uuencode} +@cindex method su +@cindex su method +@cindex method using ssh +@cindex ssh +@cindex uuencode Connect to the remote host with @command{ssh} and use the @command{uuencode} and @command{uudecode} commands to transfer files @@ -666,10 +686,15 @@ Note that this method does not invoke the @command{su} program, see below for methods which use that. -This supports the @command{-p} kludge. +This supports the @samp{-p} kludge. @item @option{tu} --- @command{telnet} with @command{uuencode} +@cindex tu method +@cindex method tu +@cindex method using telnet +@cindex telnet +@cindex uuencode Connect to the remote host with @command{telnet} and use the @command{uuencode} and @command{uudecode} commands to transfer files @@ -677,6 +702,12 @@ @item @option{sum} --- @command{su} with @command{mimencode} +@cindex method sum +@cindex sum method +@cindex method using su +@cindex su +@cindex mimencode +@cindex base-64 encoding This method does not connect to a remote host at all, rather it uses the @command{su} program to allow you to edit files as another user. Uses @@ -684,6 +715,11 @@ @item @option{suu} --- @command{su} with @command{uuencode} +@cindex method suu +@cindex suu method +@cindex method using su +@cindex su +@cindex uuencode Like @option{sum}, this uses the @command{su} program to allow you to edit files on the local host as another user. Uses @command{uuencode} @@ -691,6 +727,12 @@ @item @option{sudm} --- @command{sudo} with @command{mimencode} +@cindex method sudm +@cindex sudm method +@cindex method using sudo +@cindex sudo +@cindex mimencode +@cindex base-64 encoding This is similar to the @option{sum} method, but it uses @command{sudo} rather than @command{su} to become a different user. @@ -702,20 +744,33 @@ @item @option{sudu} --- @command{sudo} with @command{uuencode} +@cindex method sudu +@cindex sudu method +@cindex method using sudo +@cindex sudo +@cindex uuencode This is similar to the @option{suu} method, but it uses @command{sudo} rather than @command{su} to become a different user. @item @option{smx} --- @command{ssh} with @command{mimencode} +@cindex method smx +@cindex smx method +@cindex method using ssh +@cindex ssh +@cindex mimencode +@cindex base-64 encoding +@cindex Cygwin As you expect, this is similar to @option{sm}, only a little different. Whereas @option{sm} opens a normal interactive shell on -the remote host, this option uses @command{ssh -t -t HOST -l USER -/bin/sh} tp open a connection. This is useful for users where the -normal login shell is set up to ask them a number of questions when -logging in. This procedure avoids these questions, and just gives -@tramp{} a more-or-less `standard' login shell to work with. +the remote host, this option uses @samp{ssh -t -t @var{host} -l +@var{user} /bin/sh} tp open a connection. This is useful for users +where the normal login shell is set up to ask them a number of +questions when logging in. This procedure avoids these questions, and +just gives @tramp{} a more-or-less `standard' login shell to work +with. Note that this procedure does not eliminate questions asked by @command{ssh} itself. For example, @command{ssh} might ask ``Are you @@ -727,39 +782,62 @@ This is also useful for Windows users where @command{ssh}, when invoked from an Emacs buffer, tells them that it is not allocating a pseudo tty. When this happens, the login shell is wont to not print -any shell prompt, which confuses @tramp{} mightily. +any shell prompt, which confuses @tramp{} mightily. For reasons +unknown, some Windows ports for @command{ssh} (maybe the Cygwin one) +require the doubled @samp{-t} option. -This supports the @command{-p} kludge. +This supports the @samp{-p} kludge. @item @option{km} --- @command{krlogin} with @command{mimencode} +@cindex method km +@cindex km method +@cindex krlogin +@cindex Kerberos +@cindex mimencode +@cindex base-64 encoding This method is also similar to @option{sm}. It only uses the @command{krlogin -x} command to log in to the remote host. @item @option{plinku} --- @command{plink} with @command{uuencode} +@cindex method plinku +@cindex plinku method +@cindex method using plink +@cindex plink +@cindex uuencode This method is mostly interesting for Windows users using the PuTTY -implementation of SSH. It uses @command{plink -ssh} to log in to the +implementation of SSH. It uses @samp{plink -ssh} to log in to the remote host. CCC: Do we have to connect to the remote host once from the command line to accept the SSH key? Maybe this can be made automatic? -CCC: Does @command{plink} support the @command{-p} option? Tramp +CCC: Does @command{plink} support the @samp{-p} option? Tramp will support that, anyway. @item @option{plinkm} --- @command{plink} with @command{mimencode} +@cindex method plinkm +@cindex plinkm method +@cindex method using plink +@cindex plink +@cindex mimencode +@cindex base-64 encoding Like @option{plinku}, but uses base64 encoding instead of uu encoding. -@end itemize +@end table @node External transfer methods @section External transfer methods +@cindex methods, external transfer +@cindex methods, out-of-band +@cindex external transfer methods +@cindex out-of-band methods The external transfer methods operate through multiple channels, using the remote shell connection for many actions while delegating file @@ -772,6 +850,7 @@ to execute the transfer utility to copy files to and from the remote machine without any interaction. +@cindex ssh-agent This means that you will need to use @command{ssh-agent} if you use the @command{scp} program for transfers, or maybe your version of @command{scp} accepts a password on the command line.@footnote{PuTTY's @@ -784,8 +863,12 @@ look at the @command{ssh} based inline methods. -@itemize +@table @asis @item @option{rcp} --- @command{rsh} and @command{rcp} +@cindex method rcp +@cindex rcp method +@cindex rcp +@cindex rsh This method uses the @command{rsh} and @command{rcp} commands to connect to the remote machine and transfer files. This is probably the fastest @@ -793,6 +876,10 @@ @item @option{scp} --- @command{ssh} and @command{scp} +@cindex method scp +@cindex scp method +@cindex scp +@cindex ssh Using @command{ssh} to connect to the remote host and @command{scp} to transfer files between the machines is the best method for securely @@ -804,13 +891,17 @@ session can begin to absorb the advantage that the lack of encoding and decoding presents. -All the @command{ssh} based methods support the kludgy @command{-p} +All the @command{ssh} based methods support the kludgy @samp{-p} feature where you can specify a port number to connect to in the host name. For example, the host name @file{host#42} tells Tramp to -specify @command{-p 42} in the argument list for @command{ssh}. +specify @samp{-p 42} in the argument list for @command{ssh}. @item @option{rsync} --- @command{ssh} and @command{rsync} +@cindex method rsync +@cindex rsync method +@cindex rsync +@cindex ssh Using the @command{ssh} command to connect securely to the remote machine and the @command{rsync} command to transfer files is almost @@ -824,38 +915,54 @@ @command{rcp} based methods when writing to the remote system. Reading files to the local machine is no faster than with a direct copy. -This method supports the @command{-p} hack. +This method supports the @samp{-p} hack. @item @option{scpx} --- @command{ssh} and @command{scp} +@cindex method scpx +@cindex scpx method +@cindex scp +@cindex ssh +@cindex Cygwin As you expect, this is similar to @option{scp}, only a little -different. Whereas @option{scp} opens a normal interactive shell on the -remote host, this option uses @command{ssh -t -t HOST -l USER /bin/sh} to -open a connection. This is useful for users where the normal login -shell is set up to ask them a number of questions when logging in. This -procedure avoids these questions, and just gives @tramp{} a more-or-less -`standard' login shell to work with. +different. Whereas @option{scp} opens a normal interactive shell on +the remote host, this option uses @samp{ssh -t -t @var{host} -l +@var{user} /bin/sh} to open a connection. This is useful for users +where the normal login shell is set up to ask them a number of +questions when logging in. This procedure avoids these questions, and +just gives @tramp{} a more-or-less `standard' login shell to work +with. This is also useful for Windows users where @command{ssh}, when invoked from an Emacs buffer, tells them that it is not allocating a pseudo tty. When this happens, the login shell is wont to not print -any shell prompt, which confuses @tramp{} mightily. +any shell prompt, which confuses @tramp{} mightily. Maybe this +applies to the Cygwin port of SSH. -This method supports the @command{-p} hack. +This method supports the @samp{-p} hack. @item @option{pscp} --- @command{plink} and @command{pscp} +@cindex method pscp +@cindex pscp method +@cindex pscp +@cindex plink +@cindex PuTTY This method is similar to @option{scp}, but it uses the @command{plink} command to connect to the remote host, and it uses @command{pscp} for transferring the files. These programs are part of PuTTY, an SSH implementation for Windows. -CCC: Does @command{plink} support the @command{-p} hack? +CCC: Does @command{plink} support the @samp{-p} hack? @item @option{fcp} --- @command{fsh} and @command{fcp} +@cindex method fcp +@cindex fcp method +@cindex fsh +@cindex fcp This method is similar to @option{scp}, but it uses the @command{fsh} command to connect to the remote host, and it uses @command{fcp} for @@ -866,14 +973,21 @@ is called). Note, however, that you can also use one of the inline methods to achieve a similar effect. -This method uses the command @command{fsh HOST -l USER /bin/sh -i} to -establish the connection, it does not work to just say @command{fsh -HOST -l USER}. +This method uses the command @samp{fsh @var{host} -l @var{user} +/bin/sh -i} to establish the connection, it does not work to just say +@command{fsh @var{host} -l @var{user}}. -@end itemize +There is no inline method using @command{fsh} as the multiplexing +provided by the program is not very useful in our context. @tramp{} +opens just one connection to the remote host and then keeps it open, +anyway. + +@end table @node Multi-hop Methods @section Connecting to a remote host using multiple hops +@cindex multi-hop methods +@cindex methods, multi-hop Sometimes, the methods described before are not sufficient. Sometimes, it is not possible to connect to a remote host using a simple command. @@ -888,43 +1002,58 @@ transferred through the inline connection. The following two multi-hop methods are available: -@itemize +@table @asis @item @option{multi} --- base64 encoding with @command{mimencode} +@cindex method multi +@cindex multi method +@cindex base-64 encoding +@cindex mimencode The file is transferred through the connection in base64 encoding. Uses the @command{mimencode} program for doing encoding and decoding, but uses an Emacs internal implementation on the local host if available. @item @option{multiu} --- use commands @command{uuencode} and @command{uudecode} +@cindex method multiu +@cindex multiu method +@cindex uuencode The file is transferred through the connection in `uu' encoding. Uses the @command{uuencode} and @command{uudecode} programs for encoding and decoding, but uses a Lisp implementation for decoding on the local host if available. -@end itemize +@end table Each hop consists of a @dfn{hop method} specification, a user name and a host name. The following hop methods are (currently) available: -@itemize -@item @option{telnet} +@table @option +@item telnet +@cindex hop method telnet +@cindex telnet hop method Uses the well-known @command{telnet} program to connect to the host. Whereas user name and host name are supplied in the file name, the user is queried for the password. -@item @option{rsh} +@item rsh +@cindex hop method rsh +@cindex rsh hop method This uses @command{rsh} to connect to the host. You do not need to enter a password unless @command{rsh} explicitly asks for it. -@item @option{ssh} +@item ssh +@cindex hop method ssh +@cindex ssh hop method This uses @command{ssh} to connect to the host. You might have to enter a password or a pass phrase. -@item @option{su} +@item su +@cindex hop method su +@cindex su hop method This method does not actually contact a different host, but it allows you to become a different user on the host you're currently on. This @@ -939,18 +1068,21 @@ @option{su} hop, the host name is ignored and only the user name is used. -@item @option{sudo} +@item sudo +@cindex hop method sudo +@cindex sudo hop method This is similar to the @option{su} hop, except that it uses @command{sudo} rather than @command{su} to become a different user. -@end itemize +@end table -Some people might wish to use port forwarding with @code{ssh} or maybe -they have to use a nonstandard port. This can be accomplished by -putting a stanza in @file{~/.ssh/config} for the account which specifies -a different port number for a certain host name. But it can also be -accomplished within Tramp, by adding a multi-hop method. For example: +Some people might wish to use port forwarding with @command{ssh} or +maybe they have to use a nonstandard port. This can be accomplished +by putting a stanza in @file{~/.ssh/config} for the account which +specifies a different port number for a certain host name. But it can +also be accomplished within Tramp, by adding a multi-hop method. For +example: @lisp (add-to-list 'tramp-multi-connection-function-alist @@ -963,16 +1095,38 @@ @node Default Method @section Selecting a default method +@cindex default method +@vindex tramp-default-method When you select an appropriate transfer method for your typical usage you should set the variable @var{tramp-default-method} to reflect that -choice. This variable controls which method will be used when a method +choice. This variable controls which method will be used when a method is not specified in the @tramp{} file path. For example: @lisp (setq tramp-default-method "scp") @end lisp +@vindex tramp-default-method-alist +You can also specify different methods for certain user/host +combinations, via the variable @var{tramp-default-method-alist}. For +example, the following two lines specify to use the @option{sm} +method for all user names matching @samp{john} and the @option{rsync} +method for all host names matching @samp{lily}. The third line +specifies to use the @option{sum} method for the user @samp{root} on +the machine @samp{localhost}. + +@lisp +(add-to-list 'tramp-default-method-alist '("" "john" "sm")) +(add-to-list 'tramp-default-method-alist '("lily" "" "rsync")) +(add-to-list 'tramp-default-method-alist + '("\\`root\\'" "\\`localhost\\'" "sum")) +@end lisp + +@noindent +See the documentation for the variable +@var{tramp-default-method-alist} for more details. + External transfer methods are normally preferable to inline transfer methods, giving better performance. They may not be useful if you use many remote machines where you cannot log in without a password. @@ -998,6 +1152,9 @@ @node Customizing Methods @section Using Non-Standard Methods +@cindex customizing methods +@cindex using non-standard methods +@cindex create your own methods There is a variable @code{tramp-methods} which you can change if the predefined methods don't seem right. @@ -1022,6 +1179,7 @@ available, they are used to improve the performance and accuracy of remote file access. +@vindex tramp-remote-path When @tramp{} connects to the remote machine, it searches for the programs that it can use. The variable @var{tramp-remote-path} controls the directories searched on the remote machine. @@ -1043,13 +1201,17 @@ (require 'tramp) @i{; @tramp{} must be loaded before this} @i{; happens.} -@i{; We have @command{perl} in "/usr/local/perl"} -(add-to-list 'tramp-remote-path "/usr/local/perl") +@i{; We have @command{perl} in "/usr/local/perl/bin"} +(add-to-list 'tramp-remote-path "/usr/local/perl/bin") @end example @node Remote shell setup @comment node-name, next, previous, up @section Remote shell setup hints +@cindex remote shell setup +@cindex .profile file +@cindex .login file +@cindex shell init files As explained in the @ref{Overview} section, @tramp{} connects to the remote host and talks to the shell it finds there. Of course, when you @@ -1079,10 +1241,10 @@ Below you find a discussion of a few things that @tramp{} does not deal with, and that you therefore have to set up correctly. -@itemize -@item @code{shell-prompt-pattern} +@table @asis +@item @var{shell-prompt-pattern} +@vindex shell-prompt-pattern -@vindex shell-prompt-pattern After logging in to the remote host, @tramp{} has to wait for the remote shell startup to finish before it can send commands to the remote shell. The strategy here is to wait for the shell prompt. In order to @@ -1097,6 +1259,8 @@ not at the end of the buffer. @item @code{tset} and other questions +@cindex Unix command tset +@cindex tset Unix command Some people invoke the @code{tset} program from their shell startup scripts which asks the user about the terminal type of the shell. Maybe @@ -1114,14 +1278,17 @@ The variable @code{tramp-terminal-type} can be used to change this value @code{dumb}. -@end itemize +@end table @node Windows setup hints @section Issues with Cygwin ssh +@cindex Cygwin This section needs a lot of work! Please help. +@cindex method smx with Cygwin +@cindex smx method with Cygwin If you use the Cygwin installation of ssh (you have to explicitly select it in the installer), then it should work out of the box to just select @code{smx} as the connection method. You can find information about @@ -1130,14 +1297,15 @@ @node Usage @chapter Using @tramp +@cindex using @tramp Once you have installed @tramp{} it will operate fairly transparently. You will be able to access files on any remote machine that you can log in to as though they were local. Files are specified to @tramp{} using a formalized syntax specifying the -details of the system to connect to. This is similar to the syntax used -by the @command{EFS} and @command{ange-ftp} packages. +details of the system to connect to. This is similar to the syntax used +by the @command{EFS} and @command{Ange-FTP} packages. @menu @@ -1149,6 +1317,8 @@ @node Filename Syntax @section @tramp{} filename conventions +@cindex filename syntax +@cindex filename examples On Emacs, the Ange-FTP and Tramp filenames use a unified syntax. On XEmacs, EFS and Tramp use different formats for the filenames. @@ -1227,6 +1397,8 @@ @node Multi-hop filename syntax @section Multi-hop filename conventions +@cindex filename syntax for multi-hop files +@cindex multi-hop filename syntax The syntax of multi-hop file names is necessarily slightly different than the syntax of other @tramp{} file names. Here's an example multi-hop @@ -1271,6 +1443,8 @@ @node Dired @section Dired and filename completion +@cindex dired +@cindex filename completion @tramp{} works transparently with dired, enabling you to use this powerful file management tool to manage files on any machine you have access to @@ -1281,17 +1455,18 @@ stage. As filename completion needs to fetch the listing of files from the -remote machine, this feature is sometimes fairly slow. As @tramp{} does not +remote machine, this feature is sometimes fairly slow. As @tramp{} does not yet cache the results of directory listing, there is no gain in performance the second time you complete filenames. If you need to browse a directory tree, Dired is a better choice, at -present, than filename completion. Dired has its own cache mechanism +present, than filename completion. Dired has its own cache mechanism and will only fetch the directory listing once. @node Bug Reports @chapter Reporting Bugs and Problems +@cindex bug reports Bugs and problems with @tramp{} are actively worked on by the development team. Feature requests and suggestions are also more than welcome. @@ -1322,9 +1497,12 @@ @node Frequently Asked Questions @chapter Frequently Asked Questions +@cindex frequently asked questions +@cindex FAQ @itemize @bullet -@item Where can I get the latest @tramp{}? +@item +Where can I get the latest @tramp{}? @tramp{} is available at @uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/tramp.tar.gz}. @@ -1332,7 +1510,8 @@ @uref{https://savannah.gnu.org/projects/tramp/}. -@item Which systems does it work on? +@item +Which systems does it work on? The package has been used successfully on Emacs 20 and Emacs 21, as well as XEmacs 21. XEmacs 20 is more problematic, see the notes in @@ -1356,7 +1535,8 @@ Emacs? I think there was some issue with @command{ssh}? -@item I can't stop EFS starting with XEmacs +@item +I can't stop EFS starting with XEmacs Not all the older versions of @tramp{} supported XEmacs correctly. The first thing to do is to make sure that you have the latest version of @@ -1369,7 +1549,8 @@ wrong. -@item File name completion does not work with @tramp{} +@item +File name completion does not work with @tramp{} When you log in to the remote machine, do you see the output of @command{ls} in color? If so, this may be the cause of your problems. @@ -1387,7 +1568,8 @@ filename completion, report a bug to the @tramp{} developers. -@item File name completion does not work in large directories +@item +File name completion does not work in large directories @tramp{} uses globbing for some operations. (Globbing means to use the shell to expand wildcards such as `*.c'.) This might create long @@ -1396,20 +1578,22 @@ itself. If you have a large directory on the remote end, you may wish to execute -a command like @command{ls -d * ..?* > /dev/null} and see if it hangs. +a command like @samp{ls -d * ..?* > /dev/null} and see if it hangs. Note that you must first start the right shell, which might be @command{/bin/sh}, @command{ksh} or @command{bash}, depending on which of those supports tilde expansion. -@item What kinds of systems does @tramp{} work on +@item +What kinds of systems does @tramp{} work on @tramp{} really expects the remote system to be a Unix-like system. The local system should preferably be Unix-like, as well, but @tramp{} might work on NT with some tweaking. -@item How can I get notified when @tramp{} file transfers are complete? +@item +How can I get notified when @tramp{} file transfers are complete? The following snippet can be put in your @file{~/.emacs} file. It makes Emacs beep after reading from or writing to the remote host. @@ -1433,8 +1617,9 @@ @end lisp -@item There's this @file{~/.sh_history} file on the remote host which - keeps growing and growing. What's that? +@item +There's this @file{~/.sh_history} file on the remote host which keeps +growing and growing. What's that? Sometimes, @tramp{} starts @code{ksh} on the remote host for tilde expansion. Maybe @code{ksh} saves the history by default. @tramp{} @@ -1460,7 +1645,7 @@ @node Version Control @chapter The inner workings of remote version control -Unlike EFS and ange-ftp, @tramp{} has full shell access to the remote +Unlike EFS and Ange-FTP, @tramp{} has full shell access to the remote machine. This makes it possible to provide version control for files accessed under @tramp{}.