This document covers how to use an SSH client on the Windows operating system. If you use Linux, Mac OS X or another unix based OS, please read the document SSH Tutorial for Linux.
What Is SSH?
Windows users may not be as familiar with the concept of logging into
a remote computer to run programs for checking e-mail, editing files
and to run commands. It used to be that nearly all the activity on the
Internet was conducted through remote login sessions to large servers
running at universities and large enterprises. These login sessions
were text only and people could run programs to do things like check
their e-mail, download files, read newsgroup posts and even visit
websites.
When you login to these sessions, you are running what is called a shell, and so people now call these login sessions shell accounts.
There are a couple of ways that you can access a shell (command line) remotely from Windows. One of the older ways is to use the telnet
program, which is available on most network capable operating systems.
Accessing a shell account through the telnet method though poses a
danger though in that everything that you send or receive over that
telnet session is visible in plain text on your local network, and the
local network of the machine you are connecting to. So anyone who can
"sniff" the connection in between can see your username, password, email
that you read, commands that you run and their output. Actually, quite
a few internet protocols have this issue, such as FTP, SMTP (sending mail) and checking mail via plain POP3 or IMAP.
For these reasons you need a more sophisticated program than telnet to
connect to a remote host. One such program is PuTTY, which uses the
SSH protocol.
An unencrypted telnet session
SSH, which is an acronym for Secure SHell, was designed
and created to provide the best security when accessing another
computer remotely. Not only does it encrypt the remote session, it also
provides better authentication facilities, as well as features like
secure file transfer and network port forwarding so that you can
increase the security of other network protocols. It can use different
forms of encryption ranging anywhere from 512 bits on up to as high as
32768 bits and includes ciphers like AES (Advanced Encryption Scheme),
Triple DES, Blowfish, CAST128 or Arcfour. The higher the bits, the
better the security, but also the longer it will take to generate and
use keys as well as the longer it will take to pass data over the
connection.
These two diagrams on the left show how a telnet session can be
viewed by anyone on the network by using a sniffing program, such as Wireshark.
It is really rather trivial to do this and so anyone on the network can
steal your passwords and other information. The first diagram shows
user jsmith logging in to a remote server through a telnet connection.
He types his username jsmith and password C0lts06!, which are viewable
by anyone who is using the same networks that he is using.
The second diagram shows how an encrypted connection like SSH is
not viewable on the network. The server still can read the information,
but only after negotiating the encrypted session with the client.
Getting Started
To use SSH on Windows, you have to download an SSH client. One of the best and freely available clients is called PuTTY. PuTTY can be downloaded from this website.
One nice feature of putty is that it does not need to be installed
like other programs. This allows you to easily use PuTTY while at a
computer that doesn't give you administrative rights, like an Internet
cafe or computer lab.
To get started, double click on the PuTTY icon on your desktop.
Windows may ask you if you want to allow the execution of the program
you just downloaded.
So long as you are sure this was the file you downloaded from the
PuTTY website, go ahead and click on 'Run'. It might not seem like it,
but it would actually be a good idea to uncheck the option 'Always ask
before opening this file', because it ties that choice specifically to
the instance of that executable. If someone overwrites that executable
with another program with the same filename, Windows will detect that
and prompt you again. So if after unchecking that option, you are
prompted again, you should delete the program and download it again or
do a thorough check of your computer. Because imagine what could happen
if a virus, spyware or the like replaced the putty executable with
another program that logged your password.
When the program starts, the first thing that you will see is a
configuration window. This is the standard way that PuTTY starts. From
here you can setup a new session, including the hostname to connect to
and options for SSH port, what protocol to use and then on the left are
several categories for other settings that we'll cover later.
The initial PuTTY configuration window
What you will need to use this program is a shell account on a remote unix based server such as the one you receive with a Suso
account. Go ahead and type in the hostname you want to connect to in
the "Host Name" field. Suso users would use yourusername.suso.org or
www.yourwebsitedomainname.com as their hostname. Here is an example:
For now go ahead and click on the 'Open' button once you've entered a hostname.
PuTTY will now initiate a connection to the remote server. This
is where SSH kicks in. Part of the SSH protocol is to verify that you
are connecting to the server that you think you are connecting to, this
involves a cryptographic key exchange. The first time you connect to a
host, you will see this window:
Alert window showing that this is a new host key
STOP! Please read the following.
Now I know that using Windows is like playing Whack-a-mole
for some people (Click on the Ok and Yes buttons as quick as you can!)
I'm guilty of it to some degree too. But this is important. These
alerts are here for a reason and you should always stop and read and
think about what they are telling you. One of the security features of
the SSH protocol is to help you determine that the machine you are
connecting to is the machine you think it is. That way your session
won't be vulnerable to what is called a man-in-the-middle attack where
someone could steal your username and password and other data.
Once you've read the alert, then if this is the first time you
are connecting to this machine from this computer, go ahead and click
'Yes' to accept the key and cache it for the future. From then on, when
you try to connect to that server, it should present the same host key
and your PuTTY client will check if the key you receive is the same as
the one in the host key cache on your computer. If its not, you will
receive a message like this:
The cached host key does not match the key the server presented.
You can think of this process as being
similar to dropping a child off at day care. A lot of these things are
unconscious but you do a visual check to make sure that the building is
the correct one and that the teacher that you hand your child off to is
the correct one and that they acknowledge that they know who your child
is and your child knows who they are. The first time you drop your child
off, they have to get accustomed to that process and if the process
ever changes, it raises a warning flag in your mind telling you that
something might not be right. Just like the first time you connect to a
server you have to accept the host key and if the host key changes, it
raises a warning flag.
If and when you receive this error message, the best thing to do is
press 'Cancel' and contact the administrator of the server by phone.
Ask them if they have recently changed the host key on the server, which
might happen if they upgrade the server or replace it, but leave the
hostname the same. If they haven't done this, let them know that you
received this warning message and they should be able to help you. It
could mean that someone is trying to hijack your connection.
Ok, now that explanation is over, we can get back to your initial
connection. Once you've accepted the host key, you will see the window
with a black background. The server should eventually send a signal
for PuTTY to generate a 'login:' prompt. At this prompt you should type
in the username of the account you are trying to access on the server.
After pressing return, it will give you a password prompt.
The password prompts generated by PuTTY.
Enter the password for the account and press enter. If you typed
in the right password, it should continue with the login and eventually
take you to a shell prompt or perhaps a menu system, depending on the
server. If it re-prompts you for the password, keep trying and if it
still doesn't work, check with the system administrator.
You should now see something like this:
PuTTY, after successfully logging in to an account.
At this point, you are logged into the remote account. What you do here
will depend on what you are trying to accomplish of course. For a
quick primer on how to use a unix shell, see the document "What Is a Shell? What Can I Do In It?". It covers some common programs you can run and how to use the BASH shell.
Here is a screenshot showing the user running a few commands to
see a list of files in the home directory and also the www directory
below that:
Running a few common commands.
The colors that you may see as well as the output from commands may be different depending on the server you are connecting to.
Try running a few commands so you can get a feel for it. Make sure you press enter after typing in each command.
ls
cd www
ls -l
That last command uses something called a command option. In this
case, the -l tells the ls command to list the files and directories in
long format, so that you can see other information like file size and
ownership.
For now, we'll leave the rest for you to explore and go through the tutorial
mentioned above. Lets move on to using WinSCP for transfering files to
and from the server. Go ahead and type logout to exit your SSH session
and close PuTTY.
logout
Using WinSCP to transfer files
A common usage of SSH is for transfering files. You may be used to
using an FTP program for transferring files to and from a server. SSH
has a set of solutions for this. One is SCP (Secure CoPy) and one is SFTP (SSH File Transfer Protocol).
Under Windows, the best program to use for these is another program
based on the implementation of PuTTY, called WinSCP. You can download
WinSCP from http://www.winscp.net/.
It comes in two flavors, an installable version, which puts an icon in
the start menu and on the desktop, and the standalone version. The
standalone version is nice when you are at a computer where you don't
have the access rights to install software, but you can place it on your
desktop.
Go ahead and download the version that suits your needs, install
if necessary and startup WinSCP. You should have the following
configuration window in front of you.
WinSCP configuration window with example data
Put in the hostname of the server you are connecting to for the
'Host name' field, leave the port number set to 22, enter your username
and password in the provided fields. You can leave 'File protocol'
alone generally. The only reason you might need to change that is if
the server doesn't have SFTP setup. But that's what the SCP fallback
checkbox is there for anyways. Go ahead and press the 'Login' button.
On the first connection to a server, you will be presented with a window
like the following, asking you to accept the host key for the server.
Go ahead and click 'Yes' if this is a new connection or you were
expecting the key change. If you were not expecting this window, then
you should click 'No' and talk to the server administrator about the
issue. See the discussion above about host keys if you haven't read it
yet.
If all goes well, the server will accept your authentication
details and log you in. WinSCP will then take you to a window with your
local files on the left side and the remote files on the right.
The WinSCP file browser window
To use this interface, you can drag and drop files from one side
to the other or back the other way. For more information on using
WinSCP's interface, please see the interface section of the WinSCP documentation. Next we'll move on to generating an SSH key for use with the different SSH based programs.
Generating a key
Generating an SSH key is an optional thing.
You can continue to use your server side password and be fine. However,
it is more secure to use a private/public key pair with a passphrase and
more options will be available to you by doing so.
Now that you are connected and excited about being able to login to a
shell account and also transfer files, go ahead and logout. ;-)
What we are going to do is generate an SSH key. This key will be used to
authenticate us with the server in a different way than is done when
typing in a password.
You can think of a key as being similar to a key in the real
world. Instead of having to speak the password through a hole at a
speakeasy, you can just use your key to get through the door.
Using PuTTYgen
To generate a key in Windows you'll need to download another program from the PuTTY website called PuTTYgen.
PuTTYgen is a program that generates a pair of cryptographic keys used
to encrypt the data that you send to and from the server.
Once you've downloaded PuTTYgen, click on the icon. Windows will
probably prompt you that the program is not an officially signed
program. Again, make sure you have the right program before clicking on
run.
You should now see a window like this:
The only field that you might ever feel like changing here is the
field at the bottom labeled 'Number of bits in a generated key'. The
most you can set this to in an RSA type key is 4096, go ahead and set it
to that value now. Since we want to create a new key, go ahead and
click on the 'Generate' button.
You will see the top half of the window change to a progress bar
and it will tell you to 'Please generate some randomness by moving the
mouse over the blank area'. This may seem like a strange thing to do
but it is important for the security of encryption. The random
movements that you generate are very unlikely to be exactly reproduced
by someone else. The program counts how long you take in-between
individual movements and which way and how far you move the mouse. Even
you are very unlikely to produce the same sequence twice.
Moving the mouse to generate randomness
Randomness is very important in cryptography,
which is the study of obscuring information using mathematical
algorithms. Imagine a mathematical equation where the answer to two
numbers added together is 42, but you don't know what numbers are added
together to make 42, because it is supposed to be a secret. However,
you do know that the algorithm used to generate the two numbers to add
together tends to generate one number to be 23 after being run for 10
seconds. By knowing this, you can figure out that the other number
would be 19. However, by adding good random information to the
algorithm, you can make sure that the algorithm doesn't generate
repeatable results and thus prevents crackers from figuring out what
your private key or passphrase is.
Once you are done generating the randomness, PuTTYgen will start
creating the private and public key pair. This may take a minute or
two. Once it is done you will see two additional fields appear for
entering a passphrase twice. Also, the buttons for saving the public and
private key will be enabled.
PuTTYgen, after the key pair has been generated
At this point we should talk about the difference between a
passphrase and a password. Unlike a system password, when you use an
SSH key and a passphrase, your passphrase is never sent over the network
to the remote computer and so nobody can ever try to sniff it or see
what you typed by logging it on the remote side. The idea behind what
you should use for a passphrase is also different from that of a
password. Ideally, you should choose something unique and unguessable,
just like your password, but it should probably be something much
longer, like a whole sentence. Here are some examples of passphrases
I've used in the past:
now is the time for me to shine
Someday I'm going to come up with a really nice passphrase
I don't know why that special death is there.
They're not going to guess this passphrase!
The RIAA can just suck my big ass
Some passphrases that I've used have been as many as 60 characters
long with punctuation and numbers. This makes the passphrase next to
impossible to guess, provided you don't tell someone or say it in your
sleep (maybe your spouse is a spy and you didn't know it).
To give you an idea of how much more secure a passphrase is than a
password. Consider this. Even if you narrowed down the number of words
someone could use in a passphrase to 2000 potential words, if that
person used 5 words in a sentence from that 2000 word set, it would mean
there are 32,000,000,000,000,000 different combinations. Compare this
with 6,095,689,385,410,816, which is the total possible combinations in
an 8 character password using upper and lower case characters, numbers
and punctuation (about 94 potential characters). So an 8 character
password has 5.25 times less combinations than a 5 word
passphrase. In actuality, most people choose words from a set of 10,000
or more words, bringing the complexity of a 5 word passphrase to 16,405
or more times greater than that of a 8 character password. So on
average, the difficulty of cracking a passphrase is much greater than
any password that could be used. Interestingly, the potential number of
combinations of 8 word passphrase of someone with an adult vocabulary
(8000 words or more) is almost equal to the number of 8 character
password combinations multiplied by itself or about
16,777,216,000,000,000,000,000,000,000,000 combinations.
Don't use any famous quotes or phrases
for your passphrase, they may be easily guessed by another person or by a
brute force cracking program.
So think for a moment about what you want to use for a passphrase and
then type it into the given field, and again to make sure that you
typed what you thought you typed. The program will mask out the
characters that you have typed so no one else can see.
I'd also recommend filling in the field called 'Key comment',
this can be anything but usually you would put your
<username>@<yourmachinename> so that you know where the key
is from. This comment ends up at the end of the public key line that
you will put on the server.
Showing the Key comment and passphrase fields filled in.
Once all this is done, you can save the private key and the
public key. The private key is the key that you keep on your local
machine. Do not ever let anyone see this key. If you think that the
key has been viewed or accessed by someone, you should generate a new
key.
Click on the 'Save private key' button and a file window will
appear, which will probably default to your 'My Documents' folder. Call
the key file something like ssh_private_key and then click on the
'Save' button.
If your My Documents folder is on a
remote network drive or if your machine is shared by other people, you
should consult with your local computer administrator to find a safe
place to put this key file.
Next, instead of saving the public key file, all you need to do is
copy the text in the top field that says 'Public key for pasting into
OpenSSH authorized_keys file'. Make sure that you select the entire key
as it will probably extend beyond what can be seen in the box. Press
Ctrl-C to copy it.
Putting the public key on the server
So now we are assuming that the server that you are going to login to
is using OpenSSH. Most likely it is, but you may ask the system
administrator or support desk what type of SSH server they are using.
At Suso, we use OpenSSH.
You should now have the public key copied into your copy/paste
buffer, what you will do now is log back into the server and create an
authorized_keys file. Go ahead and log back into the server as you did
in the first section. Once you get to a command prompt, run the
following commands:
mkdir .ssh
chmod 700 .ssh
cd .ssh
Now you will need to run an editing program in order to create the
authorized_keys file. If you don't already know how to use vi or emacs,
then we'd recommend nano, which is a basic editor. To start nano and edit a new file called authorized_keys, run the following command:
nano -w authorized_keys
The -w part is an option telling nano not to wrap long lines. It is
important that the line that you will be pasting into the file not be
broken up at the spaces. So we need to use this option. The last
argument to nano tells it that we want to edit a file called
authorized_keys, if it doesn't exist, then it creates a new one. You
should now see something like this:
Now that you have nano open, all you have to do is paste in what
is in your copy buffer into the putty window (Make sure you still have
the public key in your paste buffer instead of something else). You can
do this by pressing your right mouse button in the window (The Ctrl-v hotkey will not work for pasting inside Putty because it has a different meaning there).
Because the line you are pasting in is so long and because you
have line wrapping turned off (remember the -w), nano will abbreviate
the line that you have pasted in. The dollar sign that you should now
see on the left end of the line is nano's way of telling you that there
is more to the line to the left of this character. If there is a dollar
sign on the right end of the line, it means that there are more
characters to the right of that character. You can use the arrow keys or
home and end to move around the line. Here are two screenshots showing
what it looks like from the end of the line and the beginning of the
line.
Once that has been pasted into the file you need to save and exit
the file. Nano uses control sequences (The use of the Ctrl key and
another key) to perform these functions. They are somewhat like hotkeys
in Windows. To save the file, press the Ctrl key and the 'x' key at
the same time. At the bottom of the screen it will ask you "Save
modified buffer". Press 'y' for yes. It may then prompt you for the
filename to write to. If it says authorized_keys, just press enter,
otherwise type in that filename and press enter. After doing this, nano
will exit and you should be back at the command line. Now run this
command:
chmod 600 authorized_keys
The 'chmod'
program is a program that changes the access permissions on files. The
reason why you need to run the above command is because a lot of
servers have a setting that requires your authorized_keys file and your
'.ssh' directory to be readable only by yourself instead of being "world
readable". This command and the one you ran previously on the '.ssh'
directory take care of that.
Configuring Putty to use the key
Now you can open PuTTY back up and configure it to use the private
key. This time we are going to save the configuration into a session so
that we can quickly retrieve it for later use. We'll save the session
after configuring PuTTY to use the key.
Open PuTTY and click on the + symbol next to the 'SSH' category
on the left hand side. A sublist will drop down, click on the 'Auth'
category under there. You should now see this:
The SSH Auth configuration screen.
The key is set down at the bottom under 'Private key file for
authentication'. Click on the 'Browse' button next to that field and
locate your private key file on the file system. It is probably in your
My Documents folder. Select the file and press 'Ok'.
Now, back in the configuration window, scroll to the top of the
categories box and click on the 'Session'. On this page enter the
hostname of the server you want to connect to and then in the box below
under the words 'Saved sessions', enter a descriptive name for this
session. I'd recommend using the hostname of the server or just the
first part of the hostname.
Now click on the 'Save' button. It will move the session name
down into the list of saved sessions. To test this, close Putty, then
reopen it. When it comes back up, you should see your saved session in
the list below. Go ahead and click on that session to select it and
click on 'Load'. Now click on the 'Open' button at the bottom. This
will open a connection to the hostname you specified for the session and
use the SSH private key you specified.
It is possible to setup shortcuts to PuTTY
that open up specific sessions when you click on them. This is done by
creating a session, then making a shortcut to Putty and changing the
target program to include '-load <sessionname>' at the end. So
you would wind up with a target like this:
"C:\Documents and Settings\Yourusername\Desktop\putty.exe" -load bambino
Now it will start out the same, prompting you for your username. But
instead of asking you for a password, it will prompt for your local
passphrase for your SSH private key.
Prompting for the passphrase
Now you can enter your passphrase and it should log you in the rest of the way.
If it didn't prompt you for the passphrase and instead prompted
you for your password, then either the permissions are wrong on the
server side 'authorized_keys' file, the '.ssh' directory or the home
directory. Or you didn't load the public key correctly into the
'authorized_keys' file. Or you didn't use the private key file.
Optional: Configure server to disallow password authentication
This step is optional, but recommended for better security. Now that
you are using public key authentication to authenticate with your server
account, your password becomes a weaker point in the security of your
account and its security will only be as strong as the unguessability of
your password. You can however completely disable the ability to use
server side password authentication with your account to drastically
increase the security of your account.
While this is a recommended configuration, it
may become inconvenient if you wish to access your account from other
computers where your SSH private key will not be available. You will
want to consider this before disabling password authentication. There
are techniques to make your key more portable however. You must also
consider other users who use the server before disabling password
authentication because these other users may not be using or may not
wish to use public key authentication.
Login using administrative privileges to your server. If your server
and your server account are both configured to use sudo for super user
privileges, then you should be able to edit the sshd_config file using
this command:
sudo vi /etc/ssh/sshd_config
If you do not have sudo privileges, but have the password for the
root account, you should be able to login directly as root and then run
the edit command:
su -
vi /etc/ssh/sshd_config
In the sshd_config file you make the following change:
PasswordAuthentication no
You may need to remove the commend character (#) from the beginning of the line. Then restart the ssh server with this command:
service sshd restart
You may need to consult with your server documentation for the proper command to restart sshd.
Now you will only be able to authenticate to any system account
using public key authentication. This prevents an attacker from gaining
access to your account through SSH via guessing your password,
regardless of its complexity.
Using Pageant for auto-login
This section will only make sense if you have created a private/public key pair in the previous section.
One of the great features of SSH and having a private key is that
you can type in your passphrase once at the beginning of your Windows
session and then login as many times as you want without having to type
it again. This is accomplished using the Pageant program.
Go back to the PuTTY website (Tired of going there yet?) and download the Pageant program.
Pageant doesn't have any window when you start it, instead it puts
itself in the Windows system tray down in the lower right next to the
clock. You can right mouse click on the icon and show its menu. Go
ahead and select 'Add Key'. This will bring up a file dialog, where you
can select your SSH private key file. After you select it and press
'Open', a new window will appear asking for the passphrase to the key.
Go ahead and enter your passphrase and click on 'Ok'.
Once you've entered the passphrase, all SSH based sessions using
PuTTY or WinSCP, will use the agent to decrypt the private key for
authentication. This means that you will not have to enter your
password or passphrase anymore until you logout of your machine, close
Pageant or tell Pageant to forget about the passphrase for the key.
Please be careful! Once you've
entered your passphrase into Pageant, anyone who has access to your
machine or who can compromise your machine can also compromise any other
machine that you have access to through your public/private key pairs.
This includes things like spyware, viruses and the link too. You must
be responsible and make sure your machine is properly protected. Most
Windows machines aren't. I'd highly recommend also enabling password
logins for your windows account and pressing Windows-L when you walk away to lock your screen.
If you want to remove your cached key from Pageant, you just need to
right click on the tray icon, select 'View Keys' from the menu and then
in the window that appears select the key and click on the 'Remove Key'
button.
Now you're probably wondering, isn't there a way to make this
automatically start when I login to Windows. Why yes, yes there is.
You can create a shortcut to pageant, change it so that it takes your
key file as an argument and put that shortcut in your 'Startup' folder.
First, create a shortcut of the Pageant program on your desktop.
Now right click on the shortcut and select 'Properties'. In the
window that appears, examine the 'Target' field. Here it sets what
program to run from the shortcut, select this field and press the 'End'
key to go to the end of the line. Now add the path to your private key
here in double quotes. Above we created a private key in your 'My
Documents' folder, so we would put the following path after the program
path:
"C:\Documents and Settings\YourUsername\My Documents\ssh_private_key.ppk"
Of course, you would replace 'YourUsername' with your actual Windows username. Click 'Ok' to accept the change.
Next we will put this shortcut in the startup folder. Open an explorer window and navigate to
"C:\Documents and Settings\YourUsername\Start Menu\Programs\Startup"
Now just drag and drop the shortcut to pageant from your desktop into
this Startup folder. You might rename the shortcut to something like
'pageant autostart with key' just to be clear.
Showing the location of the Pageant autostart shortcut.
Now go ahead and log out of your user in Windows or restart the
computer. When you log back in, you should be prompted for your
passphrase. You will probably also get the warning about the program
you are trying to run is unsigned.
TCP Port Forwarding
Primer on TCP ports
Port forwarding will take a bit of explaining. You may not think you
need it until you realize that it can help you get around firewalls,
make it look like you are coming from somewhere else.
To understand what port forwarding is you first have to
understand a bit about computer networking. The majority of network
protocols on the Internet use a protocol called TCP, which is part of
the Internet Protocol (IP) suite. When you make a connection to a
resource like web server or an e-mail server or even an SSH server like
in this document, you are connecting to a specific port number. You can
think of it as part of a street address on the Internet. Actually, its
more like an apartment number.
Each connection you make has a from port number and a to port
number as well as a from and to IP address. The from port number is
usually just randomized by your computer's operating system for safety,
but the to port number determines what protocol you are going to use.
Each type of application that you use on your computer has a set port
number that it connects to. Below are some examples of programs that
you may use, what the protocol is called and what port number the
program would connect to in order to transmit and receive data.
Common Windows Network Applications and Their Standard Network Port
Example Application
|
Protocol
|
Standard TCP Port
|
Internet Explorer, Firefox, Opera
|
HTTP
|
80
|
Internet Explorer, Firefox, Opera
|
HTTP over SSL (https)
|
443
|
Outlook (sending mail), Thunderbird (sending mail)
|
SMTP
|
25 (465 for SMTP over SSL)
|
Outlook (downloading mail), Thunderbird (downloading mail)
|
POP3
|
110 (995 for POP3 over SSL)
|
Outlook (viewing mail), Thunderbird (viewing mail)
|
IMAP
|
143 (993 for IMAP over SSL)
|
PuTTY, WinSCP
|
SSH (also SCP and SFTP)
|
22
|
CuteFTP
|
FTP
|
21, 20 and 1024 through 65535 (One reason why FTP sucks)
|
mIRC, X-Chat
|
IRC
|
6667
|
These are the standard port numbers for the
protocols. It is possible for the administrator of a server to use an
arbitrary port number and most client programs are capable of
configuring the port number that it uses.
Port forwarding in Putty
Because modern networks use firewalls and other access controls to
restrict access, you might find yourself in a situation where connecting
directly to a service from your computer can't be done. This is where
port forwarding can help.
The port forwarding interface in PuTTY is accessed from the
initial configuration window when you open the program. Under the
'Connection' category on the left click on 'SSH' then on 'Tunnels'
SSH Tunnels configuration
MySQL forward
For database users, such as MySQL, one of the most useful port
forwards you can do is to forward port 3306 from your local machine,
over your SSH connection and then to the server side's port 3306. 3306
is the default server port for MySQL. At Suso, we've firewalled out all
outside access to port 3306 for security. The only way to connect to
MySQL is from a machine on the Suso network. For some people, this can
be a problem because they would like to use GUI applications like the
MySQL administrator or query browser applications from mysql.com. These programs have to work directly with the server. So what do you do? Use an SSH tunnel.
All you need to do to create the tunnel for MySQL is put the port
number 3306 in the 'Source port' and 'hostname:3306' in the
'Destination' field and then click on the 'Add' button. The Source port
field sets what port the tunnel will listen on on your local machine.
You will connect to this end of the tunnel by going to port 3306 on the
localhost interface on your machine. The destination sets where packets
will go once they reach the other end of the tunnel. Its the target if
you will. In the example below, we use mysql2.suso.com:3306 as the
detination. The MySQL host that you connect to might be different.
Setting the source port and destination
SMTP forward
Another useful SSH tunnel or port forward is to send SMTP (sending
mail) traffic through your SSH connection. A lot of Internet Service
Providers these days don't allow users to send mail to mail servers off
of the ISP's network. For example, you might not be able to establish a
port 25 SMTP connection to mail.suso.com, even though we would allow
it. One way around this is to create a SSH tunnel for port 25. Simply
put 25 in the 'Source port' and mail.suso.com:25 in the 'Destination'
and click on 'Add'.
One other useful thing that can be done before clicking on Add is
to check the box above that is labeled 'Local ports accept connections
from other hosts'. What this does is makes your SSH tunnel available to
anyone who can connect to your machine. So you can share the tunnel
with people in your office, they would just need to connect to your
machine's IP on port 25 with their e-mail client.
Other types of tunnels
The radio buttons below the destination field can generally be left
alone. If you want the tunnel to be reversed so that it listens on a
remote port on the server and sends network packets back to your
computer, you can select 'Remote'.
Selecting 'Dynamic' will give you what is called a SOCKS5 tunnel.
The tunnels we have talked about so far all have a static hostname on
the remote or local end that can't be changed. A SOCKS5 "Dynamic"
tunnel allows you to use any SOCKS5 capable program (there are more
available than you might think) over the SSH dynamic tunnel. A lot of
programs support this type of proxy including most web browsers, File
transfer programs, Instant messaging clients, IRC clients and so on.
Remember, in the words of Benjamin "Uncle
Ben" Parker, with great power comes great responsibility. Just because
you can get around firewalls and use other hosts for sending network
traffic, doesn't mean that some system administrator isn't going to
notice you.
How To Use The Tunnels In Programs
Once you've established an SSH tunnel, you will need to do some minor
configuration within the program that you want to use the tunnel.
Outlook Express
In Microsoft Outlook Express, if you have setup a tunnel to forward
your outgoing mail connection, then you configure Outlook to use
localhost as the outgoing mail server. This is done by going to 'Tools
-> Accounts', then selecting your e-mail account, clicking on
'Properties'. Then click on the 'Servers' tab.
The Servers tab in account configuration
Depending on what port you told PuTTY to listen on on your local
machine, you might need to adjust the port to use for SMTP. This is
done on the 'Advanced' tab.
Setting the outgoing port is done via the Advanced tab.
Keep in mind that you must keep your SSH session going for whenever you want to send outgoing mail.
MySQL Administrator
Configuring MySQL to use your SSH tunnel is very easy. If you setup a
port forward like you did above, then all you need to do is put in
'localhost' in the 'Server Name' field and leave the port at 3306.
MySQL administrator config window
Use your MySQL username and password that where provided as
appropriate. Note that these are not necessarily the same as your SSH
login username and password. It depends on the practices of the host.
On Suso, you can find your database username and password in the mysqlinfo file.
Keeping Your SSH Session Alive
Sometimes you may have trouble keeping your SSH session up and idle.
For whatever reason, the connection just dies after X minutes of
inactivity. Usually this happens because there is a firewall between you
and the internet that is configured to only keep stateful connections
in its memory for 15 or so minutes.
PuTTY has some settings to help you control this problem. From
the opening config window in PuTTY, click on the 'Connection' category
on the left.
Connection config including TCP Keepalive
This screen offers two differen types of keep alives. You only
need to concern yourself with the field at the top with the label
'Seconds between keepalives (0 to turn off)'. Go ahead and set this
value to 300, which is 5 minutes between keep alive packets. These keep
alive packets, tell the router or firewall that your session is still
active. If your session still dies after setting this to 300, try 60.
If that still doesn't work, then this might not be the problem. It
might be that your network connection is dropping out. Talk to your
network administrator. Also, reading this document will give you more insight into session drops.
Ending Your SSH Session
All good things come to an end. And there are many common ways to end your SSH session.
You might be tempted to end your session by closing the window
using the standard 'X' close window button in Windows, but its not
recommended. If you do this, you might confuse the server and the
session might stay running. This all depends on the server environment.
Its generally not a good thing to do.
Here are a few common ways that you can properly end your SSH session.
exit
logout
(Ctrl-d)
The last one is actually the user pressing the 'Ctrl' key and the
letter 'd' at the same time. These all are ways of terminating the SSH
session from the server side. They usually exit the shell which in turn
logs you off the machine.
Happy SSH'ing!
External References
Credits
- Original document, graphics and examples by Mark Krenz (mark@suso.org)
- Thank you to the following people for sending corrections or giving feedback:
- Christoph Weidemann
- Torsten (for recommending sshd_config change and chmod 700 .ssh fix)
- Other people listed on the history page of this document.