Next: , Previous: Inline methods, Up: Configuration


4.3 External transfer methods

The external transfer 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.

If you want to use an external transfer method you should be able to execute the transfer utility to copy files to and from the remote machine without any interaction.

This means that you will need to use ssh-agent if you use the scp program for transfers, or maybe your version of scp accepts a password on the command line.1 If you use rsync via ssh then the same rule must apply to that connection.

If you cannot get an external method to run without asking for a password you should consider Password caching.

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.)

Two other variants, scp1_old and scp2_old, use the ssh1 and ssh2 commands explicitly. If you don't know what these are, you do not need these options.

All the ssh based methods support the kludgy `-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.

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.

The rsync based method may be considerably faster than the 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 `-p' hack.

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 GNU 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' hack.

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 shall check whether your ssh implementation does support this option. Try from the command line

          ssh localhost -o ControlMaster=yes
     

This method supports the `-p' hack.

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.

CCC: Does plink support the `-p' hack?

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 of, it forwards all requests to Ange-FTP.
smbsmbclient
This is another not natural 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 towards MS Windows NT, MS Windows 2000, and MS Windows XP.

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 be prompted always for a password if you access another share on the same host. This can be suppressed by Password caching.

MS Windows uses for authorization 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.

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' hack.

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


Footnotes

[1] PuTTY's pscp allows you to specify the password on the command line.