10 PuTTY PLINK Examples To Automate Remote Linux Commands From Windows Batch Files
10 PuTTY PLINK Examples To Automate Remote Linux Commands From Windows Batch Files
Ramesh Natarajan
Tweet
Plink stands for PuTTY Link.
On a very high-level:
If you dont have PuTTY already installed on your machine, make sure you also download
putty executable along with plink.
1/11
If you have a 32-bit Windows laptop, make sure you download the 32-bit version of plink. If
not, download the 64-bit version.
For this, click on start menu on your windows, and type cmd.exe in the search box and
press enter, this will launch the Windows command prompt.
Also, depending on where you have downloaded the plink.exe, you may have to modify the
Windowss PATH variable accordingly.
Or, you can just set your PATH variable as shown below. In the following example, Ive
downloaded the plink.exe to C:\Downloads directory.
set PATH=%PATH%;C:\Downloads
Next, type plink in the command prompt, this will display the various options available.
While the command is optional, when you dont give it, it will display a raw interactive
session, which will have lot of non-printable non-readable character on the screen. As
explained earlier, plink is not meant to be used as interactive session. Use putty for
interactive session.
2/11
First, you can just give the ip-address of the remote-server. This will then ask for the
username and password to login.
C:\>plink 192.168.101.1
login as: root
[email protected]'s password:
Or, you can also use the username using @ symbol as shown below. This will ask only for
the password, as weve specified the username.
C:\>plink [email protected]
Using username "root".
[email protected]'s password:
You can also pass the username using -l option as shown below:
You can also use the name of an existing putty session. In this example, Im using the
existing saved putty session called devdb. This is the recommended way of using, as you
can bring all the configuration information from PuTTY to here for this particular devdb
session.
C:\>plink devdb
Using username "root".
[email protected]'s password:
As you see below, once you login, youll get a command-prompt. But, doing anything here
will display some non user-friendly characters.
C:\>plink devdb
Using username "root".
[email protected]'s password:
?]0;root@devdb:~[root@devdb ~]#
?]0;root@devdb:~[root@devdb ~]#
?]0;root@devdb:~[root@devdb ~]# ?[Kls -altr
total 326432
drwx------. 2 root root 4096 Jan 23 2016 ?[01;34m.ssh?[0m
drwxr-xr-x. 2 root root 4096 May 9 2016 ?[01;3Documents?[0m
drwxr-xr-x. 2 root root 4096 May 8 12:41 ?[01;3Downloads?[0m
?[m?]0;root@devdb:~[root@devdb ~]#
On a related note, even if youve been using PuTTY for a while, you might find few tips from
3/11
here helpful: 10 Awesome PuTTY Tips and Tricks You Probably Didnt Know
For this, pass the command as the last argument to the plink as shown below.
In the following example, it will execute crontab -l command on the remote server and
display the output.
If you want to execute multiple commands, then group them together as shown below.
The following will execute the db-backup.sh shellscript on the remote Linux server. But, you
are initiating this from your Windows machine.
If the above command is asking for password, and if you dont want that to happen,
you should setup the public-private key authentication appropriately so that remote
Linux server doesnt ask for password.
You can also pass the password as a command-line option to plink as shown in one of
the examples below.
Also, if the above displays an error message about invalid protocol, then you should
pass the appropriate protocol as shown in the next example.
For example, create the following file called commands.txt on your Windows.
4/11
C:\>type commands.txt
hostname
service mysql stop
yum -y install httpd
service mysql start
service httpd start
crontab -l
Now to execute all of the above commands on the remote Linux server one-by-one in a
sequence, execute the following plink command on your Windows laptop.
The most popular and the default is SSH. Use -ssh as shown below.
For Telnet:
For Raw:
If you are trying to specify a particular protocol, and if you are getting FATAL ERROR:
Network error: Connection refused error, it means that the remote server doesnt support
the specified protocol.
You can use a saved PuTTY session which already has the protocol defined for that
particular session.
Or, you can use Windows env variable called PLINK_PROTOCOL and set the value
accordingly, which will be used by plink.
5/11
If you dont have the key based authentication setup, then you can pass the password as a
parameter in the command-line. Needless to say this method is not recommended.
This will connect to the server as root using the password specified by the -pw option, and
execute all the given Linux commands and display the output on your Windows command-
prompt.
Of course, the easy method is to use a saved putty session (For example, devdb) instead of
specifying the username and ip-address as shown below.
C:\>plink -V
plink: Release 0.69
Build platform: 64-bit Windows
Compiler: Visual Studio 2015 / MSVC++ 14.0 (_MSC_VER=1900)
Source commit: b1829b81b5c0d12dcc91f6b50b0b4d83c3df6a8e
Next, use -v option (lower-case v) as show below for more verbose output.
6/11
C:\>plink -v devdb service httpd restart
Connecting to 192.168.101.1 port 22
We claim version: SSH-2.0-PuTTY_Release_0.69
Server version: SSH-2.0-OpenSSH_5.3
We believe remote version has SSH-2 channel request bug
Using SSH protocol version 2
Doing Diffie-Hellman group exchange
Doing Diffie-Hellman key exchange with hash SHA-256
Server also has ssh-dss host key, but we don't know it
Host key fingerprint is:
ssh-rsa 2048 2f:d2:c1:7f:db:a1:16:21:d2:f4:31:f9:ae:96:be:89
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Using username "root".
Using SSPI from SECUR32.DLL
Attempting GSSAPI authentication
GSSAPI authentication request refused
Sent password
Access granted
Opening session as main channel
Opened main channel
Started a shell/command
..
In the following example, plink will connect to the remote Linux server on port 25.
When you use a saved PuTTY session and -P option, instead of using the port from the
saved session, it will use the given Port.
The following sshlog option will save the logs in the given file (sshlog.txt).
For more detailed log, use -sshrawlog option. Please note that the filesize of this will be
larger than the above, as this will store lot more information in the log file.
Also, this will take longer to execute than the above command, as sshrawlog option collects
more log information than regular sshlog option.
For SSH-1 protocol, use -1 option as shown below. If your server doesnt support it, youll get
the following error.
8/11
To use IPv6, use-6 option as shown below.
In the following example, it will use the devdb.ppk file from C:\Downloads directory.
Note: Youll get Server refused our key, if the given key is not properly configured to be
used with your Linux Server.
If the key file is not found (for example, when you give a wrong directory name), youll get
the following error:
If you specify a Key what is not of proper format, youll get the following error message.
C:\>plink -pgpfp
PuTTY Master Key as of 2015 (RSA, 4096-bit):
440D E3B5 B7A1 CA85 B3CC 1718 AB58 5DC6 0467 6F7C
Also, you can use hostkey in the plink to connect to the remote server accordingly using -
hostkey option.
In the above example, if the complex-linux-command fails, or asking for an input from the
user, or hangs, etc, then your Windows Batch script will not be waiting. Instead, plink will just
abandon the command, and the batch script will fail.
This is probably what you would expect to happen instead of your windows batch file job just
waiting or hanging.
So, use -batch option in plink when you are writing Windows batch scripts using plink.
Tweet
> Add your comment
10/11
11/11