Next: , Previous: Inline methods, Up: Configuration

4.3 External methods

The external methods operate through multiple channels, using the remote shell connection for many actions while delegating file transfers to an external transfer utility.

This saves the overhead of encoding and decoding that multiplexing the transfer through the one connection has with the inline methods.

Since external methods need their own overhead opening a new channel, all files which are smaller than tramp-copy-size-limit are still transferred with the corresponding inline method. It should provide a fair trade-off between both approaches.

rcprsh and rcp
This method uses the rsh and rcp commands to connect to the remote machine and transfer files. This is probably the fastest connection method available.

The alternative method remcp uses the remsh and rcp commands. It should be applied on machines where remsh is used instead of rsh.

scpssh and scp
Using ssh to connect to the remote host and scp to transfer files between the machines is the best method for securely connecting to a remote machine and accessing files.

The performance of this option is also quite good. It may be slower than the inline methods when you often open and close small files however. The cost of the cryptographic handshake at the start of an scp session can begin to absorb the advantage that the lack of encoding and decoding presents.

There are also two variants, scp1 and scp2, that call ‘ssh -1’ and ‘ssh -2’, respectively. This way, you can explicitly select whether you want to use the SSH protocol version 1 or 2 to connect to the remote host. (You can also specify in ~/.ssh/config, the SSH configuration file, which protocol should be used, and use the regular scp method.)

All the ssh based methods support the ‘-p’ feature where you can specify a port number to connect to in the host name. For example, the host name host#42 tells tramp to specify ‘-p 42’ in the argument list for ssh, and to specify ‘-P 42’ in the argument list for scp.

sftpssh and sftp
That is mostly the same method as scp, but using sftp as transfer command. So the same remarks are valid.

This command does not work like Ange-FTP, where ftp is called interactively, and all commands are send from within this session. Instead of, ssh is used for login.

This method supports the ‘-p’ argument.

rsyncssh and rsync
Using the ssh command to connect securely to the remote machine and the rsync command to transfer files is almost identical to the scp method.

While rsync performs much better than scp when transferring files that exist on both hosts, this advantage is lost if the file exists only on one side of the connection. A file can exists on both the remote and local host, when you copy a file from/to a remote host. When you just open a file from the remote host (or write a file there), a temporary file on the local side is kept as long as the corresponding buffer, visiting this file, is alive.

This method supports the ‘-p’ argument.

scpxssh and scp
As you would expect, this is similar to scp, only a little different. Whereas scp opens a normal interactive shell on the remote host, this option uses ‘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.

This is also useful for Windows users where 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.

This method supports the ‘-p’ argument.

scpcssh and scp
Newer versions of ssh (for example OpenSSH 4) offer an option ControlMaster. This allows scp to reuse an existing ssh channel, which increases performance.

Before you use this method, you should check whether your ssh implementation supports this option. Try from the command line

          ssh localhost -o ControlMaster=yes /bin/true

If that command succeeds silently, then you can use scpc; but if it fails like

          command-line: line 0: Bad configuration option: ControlMaster

then you cannot use it. Note, that the option ControlPersist, if it is supported by your ssh version, must be set to no.

This method supports the ‘-p’ argument.

rsynccssh and rsync
Like the scpc method, rsyncc improves the underlying ssh connection by the option ControlMaster. This allows rsync to reuse an existing ssh channel, which increases performance.

This method supports the ‘-p’ argument.

pscpplink and pscp
This method is similar to scp, but it uses the plink command to connect to the remote host, and it uses pscp for transferring the files. These programs are part of PuTTY, an SSH implementation for Windows.

This method supports the ‘-P’ argument.

psftpplink and psftp
As you would expect, this method is similar to sftp, but it uses the plink command to connect to the remote host, and it uses psftp for transferring the files. These programs are part of PuTTY, an SSH implementation for Windows.

This method supports the ‘-P’ argument.

fcpfsh and fcp
This method is similar to scp, but it uses the fsh command to connect to the remote host, and it uses fcp for transferring the files. fsh/fcp are a front-end for ssh which allow for reusing the same ssh session for submitting several commands. This avoids the startup overhead of scp (which has to establish a secure connection whenever it is called). Note, however, that you can also use one of the inline methods to achieve a similar effect.

This method uses the command ‘fsh host -l user /bin/sh -i’ to establish the connection, it does not work to just say fsh host -l user.

There is no inline method using 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.

ftp
This is not a native tramp method. Instead, it forwards all requests to Ange-FTP.
smbsmbclient
This is another not native tramp method. It uses the smbclient command on different Unices in order to connect to an SMB server. An SMB server might be a Samba (or CIFS) server on another UNIX host or, more interesting, a host running MS Windows. So far, it is tested against MS Windows NT, MS Windows 2000, MS Windows XP, MS Windows Vista, and MS Windows 7.

The first directory in the localname must be a share name on the remote host. Remember that the $ character, in which default shares usually end, must be written $$ due to environment variable substitution in file names. If no share name is given (i.e., remote directory /), all available shares are listed.

Since authorization is done on share level, you will always be prompted for a password if you access another share on the same host. This can be suppressed by Password handling.

For authorization, MS Windows uses both a user name and a domain name. Because of this, the tramp syntax has been extended: you can specify a user name which looks like user%domain (the real user name, then a percent sign, then the domain name). So, to connect to the machine melancholia as user daniel of the domain BIZARRE, and edit .emacs in the home directory (share daniel$) I would specify the filename /smb:daniel%BIZARRE@melancholia:/daniel$$/.emacs.

Depending on the Windows domain configuration, a Windows user might be considered as domain user per default. In order to connect as local user, the WINS name of that machine must be given as domain name. Usually, it is the machine name in capital letters. In the example above, the local user daniel would be specified as /smb:daniel%MELANCHOLIA@melancholia:/daniel$$/.emacs.

The domain name as well as the user name are optional. If no user name is specified at all, the anonymous user (without password prompting) is assumed. This is different from all other tramp methods, where in such a case the local user name is taken.

The smb method supports the ‘-p’ argument.

Please note: If Emacs runs locally under MS Windows, this method isn't available. Instead, you can use UNC file names like //melancholia/daniel$$/.emacs. The only disadvantage is that there's no possibility to specify another user name.