123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445 |
- \C{plink} Using the command-line connection tool \i{Plink}
- \i{Plink} is a command-line connection tool similar to UNIX \c{ssh}.
- It is mostly used for \i{automated operations}, such as making CVS
- access a repository on a remote server.
- Plink is probably not what you want if you want to run an
- \i{interactive session} in a console window.
- \H{plink-starting} Starting Plink
- Plink is a command line application. This means that you cannot just
- double-click on its icon to run it and instead you have to bring up
- a \i{console window}. In Windows 95, 98, and ME, this is called an
- \q{MS-DOS Prompt}, and in Windows NT, 2000, and XP, it is called a
- \q{Command Prompt}. It should be available from the Programs section
- of your Start Menu.
- In order to use Plink, the file \c{plink.exe} will need either to be
- on your \i{\c{PATH}} or in your current directory. To add the
- directory containing Plink to your \c{PATH} environment variable,
- type into the console window:
- \c set PATH=C:\path\to\putty\directory;%PATH%
- This will only work for the lifetime of that particular console
- window. To set your \c{PATH} more permanently on Windows NT, 2000,
- and XP, use the Environment tab of the System Control Panel. On
- Windows 95, 98, and ME, you will need to edit your \i\c{AUTOEXEC.BAT}
- to include a \c{set} command like the one above.
- \H{plink-usage} Using Plink
- This section describes the basics of how to use Plink for
- interactive logins and for automated processes.
- Once you've got a console window to type into, you can just type
- \c{plink} on its own to bring up a usage message. This tells you the
- version of Plink you're using, and gives you a brief summary of how to
- use Plink:
- \c C:\>plink
- \c Plink: command-line connection utility
- \c Release 0.81
- \c Usage: plink [options] [user@]host [command]
- \c ("host" can also be a PuTTY saved session name)
- \c Options:
- \c -V print version information and exit
- \c -pgpfp print PGP key fingerprints and exit
- \c -v show verbose messages
- \c -load sessname Load settings from saved session
- \c -ssh -telnet -rlogin -raw -serial
- \c force use of a particular protocol
- \c -ssh-connection
- \c force use of the bare ssh-connection protocol
- \c -P port connect to specified port
- \c -l user connect with specified username
- \c -batch disable all interactive prompts
- \c -proxycmd command
- \c use 'command' as local proxy
- \c -sercfg configuration-string (e.g. 19200,8,n,1,X)
- \c Specify the serial configuration (serial only)
- \c The following options only apply to SSH connections:
- \c -pwfile file login with password read from specified file
- \c -D [listen-IP:]listen-port
- \c Dynamic SOCKS-based port forwarding
- \c -L [listen-IP:]listen-port:host:port
- \c Forward local port to remote address
- \c -R [listen-IP:]listen-port:host:port
- \c Forward remote port to local address
- \c -X -x enable / disable X11 forwarding
- \c -A -a enable / disable agent forwarding
- \c -t -T enable / disable pty allocation
- \c -1 -2 force use of particular SSH protocol version
- \c -4 -6 force use of IPv4 or IPv6
- \c -C enable compression
- \c -i key private key file for user authentication
- \c -noagent disable use of Pageant
- \c -agent enable use of Pageant
- \c -no-trivial-auth
- \c disconnect if SSH authentication succeeds trivially
- \c -noshare disable use of connection sharing
- \c -share enable use of connection sharing
- \c -hostkey keyid
- \c manually specify a host key (may be repeated)
- \c -sanitise-stderr, -sanitise-stdout, -no-sanitise-stderr, -no-sanitise-stdout
- \c do/don't strip control chars from standard output/error
- \c -no-antispoof omit anti-spoofing prompt after authentication
- \c -m file read remote command(s) from file
- \c -s remote command is an SSH subsystem (SSH-2 only)
- \c -N don't start a shell/command (SSH-2 only)
- \c -nc host:port
- \c open tunnel in place of session (SSH-2 only)
- \c -sshlog file
- \c -sshrawlog file
- \c log protocol details to a file
- \c -logoverwrite
- \c -logappend
- \c control what happens when a log file already exists
- \c -shareexists
- \c test whether a connection-sharing upstream exists
- Once this works, you are ready to use Plink.
- \S{plink-usage-interactive} Using Plink for interactive logins
- To make a simple interactive connection to a remote server, just
- type \c{plink} and then the host name:
- \c C:\>plink login.example.com
- \c
- \c Debian GNU/Linux 2.2 flunky.example.com
- \c flunky login:
- You should then be able to log in as normal and run a session. The
- output sent by the server will be written straight to your command
- prompt window, which will most likely not interpret terminal \i{control
- codes} in the way the server expects it to. So if you run any
- full-screen applications, for example, you can expect to see strange
- characters appearing in your window. Interactive connections like
- this are not the main point of Plink.
- In order to connect with a different protocol, you can give the
- command line options \c{-ssh}, \c{-ssh-connection}, \c{-telnet},
- \c{-rlogin}, or \c{-raw}. To make an SSH connection, for example:
- \c C:\>plink -ssh login.example.com
- \c login as:
- If you have already set up a PuTTY saved session, then instead of
- supplying a host name, you can give the saved session name. This
- allows you to use public-key authentication, specify a user name,
- and use most of the other features of PuTTY:
- \c C:\>plink my-ssh-session
- \c Sent username "fred"
- \c Authenticating with public key "fred@winbox"
- \c Last login: Thu Dec 6 19:25:33 2001 from :0.0
- \c fred@flunky:~$
- (You can also use the \c{-load} command-line option to load a saved
- session; see \k{using-cmdline-load}. If you use \c{-load}, the saved
- session exists, and it specifies a hostname, you cannot also specify a
- \c{host} or \c{user@host} argument - it will be treated as part of the
- remote command.)
- \S{plink-usage-batch} Using Plink for automated connections
- More typically Plink is used with the SSH protocol, to enable you to
- talk directly to a program running on the server. To do this you
- have to ensure Plink is \e{using} the SSH protocol. You can do this
- in several ways:
- \b Use the \c{-ssh} option as described in
- \k{plink-usage-interactive}.
- \b Set up a PuTTY saved session that describes the server you are
- connecting to, and that also specifies the protocol as SSH.
- \b Set the Windows environment variable \i\c{PLINK_PROTOCOL} to the
- word \c{ssh}.
- Usually Plink is not invoked directly by a user, but run
- automatically by another process. Therefore you typically do not
- want Plink to prompt you for a user name or a password.
- Next, you are likely to need to avoid the various interactive
- prompts Plink can produce. You might be prompted to verify the host
- key of the server you're connecting to, to enter a user name, or to
- enter a password.
- To avoid being prompted for the server host key when using Plink for
- an automated connection, you can first make a \e{manual}
- connection (using either of PuTTY or Plink) to the same server,
- verify the host key (see \k{gs-hostkey} for more information), and
- select \q{Accept} to add the host key to the Registry. After that,
- Plink commands connecting to that server should not give a host key
- prompt unless the host key changes. Alternatively, you can specify
- the appropriate host key(s) on Plink's command line every time you
- use it; see \k{using-cmdline-hostkey}.
- To avoid being prompted for a user name, you can:
- \b Use the \c{-l} option to specify a user name on the command line.
- For example, \c{plink login.example.com -l fred}.
- \b Set up a PuTTY saved session that describes the server you are
- connecting to, and that also specifies the username to log in as
- (see \k{config-username}).
- To avoid being prompted for a password, you should almost certainly
- set up \i{public-key authentication}. (See \k{pubkey} for a general
- introduction to public-key authentication.) Again, you can do this
- in two ways:
- \b Set up a PuTTY saved session that describes the server you are
- connecting to, and that also specifies a private key file (see
- \k{config-ssh-privkey}). For this to work without prompting, your
- private key will need to have no passphrase.
- \b Store the private key in Pageant. See \k{pageant} for further
- information.
- Once you have done all this, you should be able to run a remote
- command on the SSH server machine and have it execute automatically
- with no prompting:
- \c C:\>plink login.example.com -l fred echo hello, world
- \c hello, world
- \c
- \c C:\>
- Or, if you have set up a saved session with all the connection
- details:
- \c C:\>plink mysession echo hello, world
- \c hello, world
- \c
- \c C:\>
- Then you can set up other programs to run this Plink command and
- talk to it as if it were a process on the server machine.
- \S{plink-options} Plink command line options
- Plink accepts all the general command line options supported by the
- PuTTY tools. See \k{using-general-opts} for a description of these
- options.
- Plink also supports some of its own options. The following sections
- describe Plink's specific command-line options.
- \S2{plink-option-batch} \I{-batch-plink}\c{-batch}: disable all
- interactive prompts
- If you use the \c{-batch} option, Plink will never give an
- interactive prompt while establishing the connection. If the
- server's host key is invalid, for example (see \k{gs-hostkey}), then
- the connection will simply be abandoned instead of asking you what
- to do next.
- This may help Plink's behaviour when it is used in automated
- scripts: using \c{-batch}, if something goes wrong at connection
- time, the batch job will fail rather than hang.
- \S2{plink-option-s} \I{-s-plink}\c{-s}: remote command is SSH subsystem
- If you specify the \c{-s} option, Plink passes the specified command
- as the name of an SSH \q{\i{subsystem}} rather than an ordinary command
- line.
- (This option is only meaningful with the SSH-2 protocol.)
- \S2{plink-option-share} \I{-share-plink}\c{-share}:
- Test and try to share an existing connection.
- This option tries to detect if an existing connection can be shared
- (See \k{config-ssh-sharing} for more information about SSH connection
- sharing.) and reuses that connection.
- A Plink invocation of the form:
- \c plink -share <session>
- \e iiiiiiiii
- will test whether there is currently a viable \q{upstream} for the
- session in question, which can be specified using any syntax you'd
- normally use with Plink to make an actual connection (a host/port
- number, a bare saved session name, \c{-load}, etc). If no \q{upstream}
- viable session is found and \c{-share} is specified, this connection
- will be become the \q{upstream} connection for subsequent connection
- sharing tries.
- (This option is only meaningful with the SSH-2 protocol.)
- \S2{plink-option-shareexists} \I{-shareexists-plink}\c{-shareexists}:
- test for connection-sharing upstream
- This option does not make a new connection; instead it allows testing
- for the presence of an existing connection that can be shared.
- (See \k{config-ssh-sharing} for more information about SSH connection
- sharing.)
- A Plink invocation of the form:
- \c plink -shareexists <session>
- \e iiiiiiiii
- will test whether there is currently a viable \q{upstream} for the
- session in question, which can be specified using any syntax you'd
- normally use with Plink to make an actual connection (a host/port
- number, a bare saved session name, \c{-load}, etc). It returns a
- zero exit status if a usable \q{upstream} exists, nonzero otherwise.
- (This option is only meaningful with the SSH-2 protocol.)
- \S2{plink-option-sanitise} \I{-sanitise-stderr}\I{-sanitise-stdout}\I{-no-sanitise-stderr}\I{-no-sanitise-stdout}\c{-sanitise-}\e{stream}: control output sanitisation
- In some situations, Plink applies a sanitisation pass to the output
- received from the server, to strip out control characters such as
- backspace and the escape character.
- The idea of this is to prevent remote processes from sending confusing
- escape sequences through the standard error channel when Plink is
- being used as a transport for something like \cw{git} or CVS. If the
- server actually wants to send an error message, it will probably be
- plain text; if the server abuses that channel to try to write over
- unexpected parts of your terminal display, Plink will try to stop it.
- By default, this only happens for output channels which are sent to a
- Windows console device, or a Unix terminal device. (Any output stream
- going somewhere else is likely to be needed by an 8-bit protocol and
- must not be tampered with at all.) It also stops happening if you tell
- Plink to allocate a remote pseudo-terminal (see \k{using-cmdline-pty}
- and \k{config-ssh-pty}), on the basis that in that situation you often
- \e{want} escape sequences from the server to go to your terminal.
- But in case Plink guesses wrong about whether you want this
- sanitisation, you can override it in either direction, using one of
- these options:
- \dt \c{-sanitise-stderr}
- \dd Sanitise server data written to Plink's standard error channel,
- regardless of terminals and consoles and remote ptys.
- \dt \c{-no-sanitise-stderr}
- \dd Do not sanitise server data written to Plink's standard error
- channel.
- \dt \c{-sanitise-stdout}
- \dd Sanitise server data written to Plink's standard output channel.
- \dt \c{-no-sanitise-stdout}
- \dd Do not sanitise server data written to Plink's standard output
- channel.
- \S2{plink-option-antispoof} \i{-no-antispoof}: turn off authentication spoofing protection prompt
- In SSH, some possible server authentication methods require user input
- (for example, password authentication, or entering a private key
- passphrase), and others do not (e.g. a private key held in Pageant).
- If you use Plink to run an interactive login session, and if Plink
- authenticates without needing any user interaction, and if the server
- is malicious or compromised, it could try to trick you into giving it
- authentication data that should not go to the server (such as your
- private key passphrase), by sending what \e{looks} like one of Plink's
- local prompts, as if Plink had not already authenticated.
- To protect against this, Plink's default policy is to finish the
- authentication phase with a final trivial prompt looking like this:
- \c Access granted. Press Return to begin session.
- so that if you saw anything that looked like an authentication prompt
- \e{after} that line, you would know it was not from Plink.
- That extra interactive step is inconvenient. So Plink will turn it off
- in as many situations as it can:
- \b If Plink's standard input is not pointing at a console or terminal
- device \dash for example, if you're using Plink as a transport for
- some automated application like version control \dash then you
- \e{can't} type passphrases into the server anyway. In that situation,
- Plink won't try to protect you from the server trying to fool you into
- doing so.
- \b If Plink is in batch mode (see \k{plink-usage-batch}), then it
- \e{never} does any interactive authentication. So anything looking
- like an interactive authentication prompt is automatically suspect,
- and so Plink omits the anti-spoofing prompt.
- But if you still find the protective prompt inconvenient, and you
- trust the server not to try a trick like this, you can turn it off
- using the \cq{-no-antispoof} option.
- \H{plink-batch} Using Plink in \i{batch files} and \i{scripts}
- Once you have set up Plink to be able to log in to a remote server
- without any interactive prompting (see \k{plink-usage-batch}), you
- can use it for lots of scripting and batch purposes. For example, to
- start a backup on a remote machine, you might use a command like:
- \c plink root@myserver /etc/backups/do-backup.sh
- Or perhaps you want to fetch all system log lines relating to a
- particular web area:
- \c plink mysession grep /~fred/ /var/log/httpd/access.log > fredlog
- Any non-interactive command you could usefully run on the server
- command line, you can run in a batch file using Plink in this way.
- \H{plink-cvs} Using Plink with \i{CVS}
- To use Plink with CVS, you need to set the environment variable
- \i\c{CVS_RSH} to point to Plink:
- \c set CVS_RSH=\path\to\plink.exe
- You also need to arrange to be able to connect to a remote host
- without any interactive prompts, as described in
- \k{plink-usage-batch}.
- You should then be able to run CVS as follows:
- \c cvs -d :ext:user@sessionname:/path/to/repository co module
- If you specified a username in your saved session, you don't even
- need to specify the \q{user} part of this, and you can just say:
- \c cvs -d :ext:sessionname:/path/to/repository co module
- \H{plink-wincvs} Using Plink with \i{WinCVS}
- Plink can also be used with WinCVS. Firstly, arrange for Plink to be
- able to connect to a remote host non-interactively, as described in
- \k{plink-usage-batch}.
- Then, in WinCVS, bring up the \q{Preferences} dialogue box from the
- \e{Admin} menu, and switch to the \q{Ports} tab. Tick the box there
- labelled \q{Check for an alternate \cw{rsh} name} and in the text
- entry field to the right enter the full path to \c{plink.exe}.
- Select \q{OK} on the \q{Preferences} dialogue box.
- Next, select \q{Command Line} from the WinCVS \q{Admin} menu, and type
- a CVS command as in \k{plink-cvs}, for example:
- \c cvs -d :ext:user@hostname:/path/to/repository co module
- or (if you're using a saved session):
- \c cvs -d :ext:user@sessionname:/path/to/repository co module
- Select the folder you want to check out to with the \q{Change Folder}
- button, and click \q{OK} to check out your module. Once you've got
- modules checked out, WinCVS will happily invoke plink from the GUI for
- CVS operations.
- \# \H{plink-whatelse} Using Plink with... ?
|