miscellaneous_tips:01_windows:using_putty_on_windows_to_work_on_a_remote_linux_machine

Using 'PuTTY' on Windows to Work On a Remote Linux Machine

Here are some hints how to login from a Windows machine to a Linux machine via SSH, e.g. to work natively with a git repo that is stored on the Linux machine.

:!: Please note a user name has to be specified when logging in to the remote machine, so first an appropriate user has to be created on the remote machine.


PuTTY is a terminal program that also supports SSH to log in to a remote machine over a network. It can be downloaded here:

The best approach is to select and download the .msi installer that is a appropriate for your Windows version, i.e. the 32 bit or 64 bit version, so PuTTY can be run from the Windows start menu.

The installation program includes a few utilities that are installed beside the PuTTY program itself.


When accessing a remote machine via SSH, the host name of the remote machine, the name of a user known on the remote machine and the password of that user have to be known to be able to log in.

If the remote machine is accessed frequently, typing the password every time is a pain, so there is a possibility to create an SSH key pair on a local machine and transfer the public key to the remote machine, so it's no more required to enter a password. PuTTY can create and use an SSH key to support this, and it can save several profiles with different settings for several remote machines.


Run the PuTTY key Generator program PuTTYgen from the Windows start menu to create or manage one or more SSH keys that can be used to connect to a remote machine without having to enter a password.

Loading an Existing 'OpenSSH' Key

If an OpenSSH key pair has already been created, e.g. by running ssh-keygen on a Linux machine, the private key file (e.g. id_rsa) and associated public key file (e.g. id_rsa.pub) are usually located in the ~/.ssh/ directory on the Linux machine.

The private key file can be imported via the Conversions–>Import Key menu and selecting the file,


Generating a New Key

A new key pair can be generated by clicking the Generate button.


Loading an Existing 'PuTTY' Key

An existing key can be loaded by clicking the Load button.


To be able to use the SSH key to login to a Linux machine, the public part of the SSH key pair has to be transferred to the Linux machine.

Once a key has been loaded or generated, the associated public key in a format appropriate for OpenSSH on a Linux machine is displayed in the field labelled Public key for pasting into OpenSSH authorized_keys file:.

The text should start with something like SSH-RSA, and it is a very long, single line of text that is wrapped into several lines in the PuTTYgen dialog.

As the label suggests, this long line can be copied and pasted into the file ~/.ssh/authorized_keys on the Linux machine.


Once a SSH key has been loaded or generated, it has to be saved as PuTTY key file with extension .ppk, which can later be used to specify a particular key for PuTTY.

When the file is saved, PuTTY may ask if you really want to save the file without password. If you specify a password, you will have to enter the password once before the key can be used, but it protects the key from being used by someone else, and thus increases security.


Run the PuTTY program from the Windows start menu and enter some information.

If a remote session has already been saved, a session can be selected and loaded here. If the settings are appropriate, you can click on the Open button to start the session.

Otherwise the host name or IP address of the remote machine has to be entered in the Host Name field.

The Port '22' and Connection Type 'SSH' should be selected by default, and this is usually OK.


There is a checkbox labelled Enable TCP keepalives which can be ticked to keep an SSH session alive even though there is no user interaction for some time. Without this option the remote SSH server might terminate the connection after some time without interaction.


The 'Data' Section of the 'Connection' Tab

There is a field Auto-login username where you can enter the name of the user to log in at the remote system.


The 'SSH' Section of the 'Connection' Tab

There is a field where you can specify a command to be executed on the remote machine. For example, you could enter

cd /var/www/htdocs; /bin/bash --login

to immediately change to the specified directory when logging in to the remote machine.


The 'SSH-->Auth' Section of the 'Connection' Tab

In the Auth part of the SSH section there is a field labelled Private key file for authentication where you can enter the name of a key file you have created before. If a valid private key file has been specified and the associated public key has been added to the 'authorized_keys' file on the remote Linux machine, you will be able to establish the remote connection without having to enter a password.


The 'X11' Section of the 'Connection' Tab

If you want to run graphical programs on the remote machine, you have to make sure the checkbox labelled Enable X11 forwarding in this secrtion is ticked, and an X server is running on the local machine.


Of course there are many more settings in the remaining sections, but the default values are normally OK for most use cases, and you should only make changes if you know what you're doing.


If you want to save the settings you've made as profile for later sessions, don't forget to go back to the session tab, make sure an appropriate name has been entered in the Saved Sessions field, and click on the Save button.

This allows to quickly reload the set of sessions when connecting to the same remote machine next time.

Finally click on the Open button to start the session.


Programs with a graphic user interface (e.g. gitk) running on a Linux/Unix machine require a so-called X server to display graphic dialogs and windows of the program. If working on a remote Linux/Unix machine, the graphic output can be forwarded via the network to an X server running on the local machine to display the graphic output, which looks exactly as if the program was running on the local machine.

Most Unix-like operating systems run an X server anyway by default, but Windows doesn't, so on Windows, an X server must be explicitly installed and run to display the output of a graphics program that is running on a remote Linux machine.

VcXserv is a nice, open source X Server implementation for Windows that can be downloaded here:

From the Link above, select the version to download (the latest one should be good, e.g. 1.20.6.0), download the 32 bit version (e.g. vcxsrv.1.20.6.0.installer.exe) or 64 bit version (e.g. vcxsrv-64.1.20.6.0.installer.exe) of the installer, as appropriate for your Windows version.

Then install and run the program, accepting all default settings.

:!: Please note that X11 forwarding has to be enabled for the SSH session that runs the program on the remote Linux machine.


Martin Burnicki martin.burnicki@burnicki.net 2020-02-18

  • miscellaneous_tips/01_windows/using_putty_on_windows_to_work_on_a_remote_linux_machine.txt
  • Zuletzt geändert: 2021-01-18 17:20
  • (Externe Bearbeitung)