Home Server A beginner’s guide to using SSH in Linux

A beginner’s guide to using SSH in Linux

SSH (Secure Shell) is a vital tool for secure remote system management in Linux. This guide introduces the basics of SSH, including setting up an SSH server, connecting to remote systems, and transferring files securely, providing a solid foundation for beginners in remote Linux administration.

by Divya Kiran Kumar
getting started with ssh

Welcome to the world of SSH, or Secure Shell, in Linux! Whether you’re a budding system administrator, a developer, or just a tech enthusiast, mastering SSH is like getting a new superpower. In this blog, I’m going to walk you through the basics of SSH, including how to set it up and some cool things you can do with it. As someone who spends a lot of time tinkering with Linux servers, I’ve grown to love the simplicity and power of SSH. Let’s dive in!

What is SSH?

SSH stands for Secure Shell. It’s a network protocol that allows secure remote login from one computer to another. It’s widely used by system administrators to control web servers, developers to work on code, or even by hobbyists to manage their personal projects. The beauty of SSH is its security; it encrypts your session, making the connection safe from eavesdropping.

Setting up SSH in Linux

Installing SSH

First things first, let’s install SSH. Most Linux distributions come with SSH client installed by default, but you might need to install the SSH server.

For Debian/Ubuntu:

sudo apt update
sudo apt install openssh-server

For Fedora:

sudo dnf install openssh-server

For Arch Linux:

sudo pacman -S openssh

Starting and enabling the SSH service

Once installed, you need to start the SSH service and enable it to start on boot.

sudo systemctl start sshd
sudo systemctl enable sshd

Checking the SSH service status

To ensure everything is running smoothly, check the SSH service status.

sudo systemctl status sshd

You should see output indicating that the service is active and running.

Connecting to a remote machine

To connect to a remote machine, you need its IP address or hostname and the user account you’re accessing.

ssh username@hostname

For example:

ssh john@192.168.1.10

Upon first connection, you’ll be asked to verify the identity of the host. This is part of SSH’s security measures.

SSH keys for secure, password-less logins

Using SSH keys is a more secure alternative to using passwords. It uses a pair of cryptographic keys to authenticate to an SSH server as an alternative to password-based logins.

Generating SSH keys

Generate an SSH key pair using:

ssh-keygen

You’ll be prompted to enter a file in which to save the keys and an optional passphrase for extra security.

Copying the public key to the remote server

Once your keys are generated, copy the public key to your remote server using:

ssh-copy-id username@hostname

Now you can log in to the remote server without a password!

Customizing SSH

Configuring SSH

You can customize SSH settings in the /etc/ssh/sshd_config file. Always make a backup of this file before editing!

Example: Changing the default SSH port

To change the default port (22), edit the file:

sudo nano /etc/ssh/sshd_config

Find the line with #Port 22, remove the #, and change 22 to your desired port number.

Restart the SSH service after changes

Don’t forget to restart the SSH service to apply changes:

sudo systemctl restart sshd

Tips and tricks

Using SSH aliases

If you regularly connect to the same server, you can create an alias in your ~/.ssh/config file.

Host myserver
    HostName 192.168.1.10
    User john
    Port 2222

Now, simply use ssh myserver to connect!

File transfer over SSH

SCP (Secure Copy Protocol) is used for secure file transferring over SSH.

To copy a file from your local machine to a remote server:

scp file.txt username@hostname:/path/to/destination

Remote command execution

Run commands on a remote machine without logging in:

ssh username@hostname 'command'

For example:

ssh john@192.168.1.10 'ls -l /home/john'

Real-world examples of SSH in action

Now that we’ve covered the basics of SSH, let’s dive into some practical, real-world examples that show how SSH can be used in everyday scenarios. I’ll demonstrate these examples on an Ubuntu terminal, which is my go-to distro for its user-friendliness. Keep in mind, the output might slightly vary based on your system configuration and the remote server’s setup.

1. Basic remote login

Input:

ssh alice@192.168.1.15

Example output:

alice@192.168.1.15's password: 
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-42-generic x86_64)
* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage
Last login: Tue Jan 10 10:15:17 2024 from 192.168.1.12
alice@remote-server:~$ 

2. Executing a remote command

Input:

ssh bob@192.168.1.15 'df -h'

Example output:

bob@192.168.1.15's password: 
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           395M  5.6M  389M   2% /run
/dev/sda1       30G   12G   17G  42% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock

3. Transferring files to a remote server

Input:

scp report.txt carol@192.168.1.15:/home/carol/documents

Example output:

carol@192.168.1.15's password: 
report.txt                                    100% 1050   1.1KB/s   00:00    

4. Port forwarding

Input:

ssh -L 8080:localhost:80 david@192.168.1.15

Example output:

david@192.168.1.15's password: 
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-42-generic x86_64)
...

Note: This command forwards the local port 8080 to port 80 on the remote server. Now, accessing http://localhost:8080 on your local machine will show what’s served on port 80 of the remote server.

5. Monitoring system logs in real time

Input:

ssh eve@192.168.1.15 'tail -f /var/log/syslog'

Example output:

eve@192.168.1.15's password: 
Jan 11 10:20:01 remote-server CRON[18360]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jan 11 10:30:01 remote-server CRON[18361]: (root) CMD (   command to run scheduled tasks)
...

Note: This command tails the system log file, allowing you to monitor it in real-time for troubleshooting.

Each of these examples showcases the versatility of SSH in managing remote Linux systems. Whether it’s for basic file transfers, system monitoring, or advanced configurations like port forwarding, SSH remains a vital tool in the arsenal of anyone managing Linux systems.

Quick reference SSH commands list

Here’s a quick reference table for some common SSH commands and their descriptions, for those who are frequently working with SSH in Linux.

SSH Command Description
ssh user@host Connects to host as user.
ssh -p port user@host Connects to host on port as user.
ssh-keygen Generates a new SSH key pair.
ssh-copy-id user@host Copies your key to host for user to enable password-less login.
ssh -L localPort:remoteHost:remotePort localUser@localHost Sets up local port forwarding.
ssh -R remotePort:localHost:localPort remoteUser@remoteHost Sets up remote port forwarding.
scp file.txt user@host:/path Securely copies file.txt to the remote /path.
scp user@host:/path/file.txt . Securely copies a file from the remote system to the local system.
ssh user@host 'command' Runs command on the remote host without logging in.
ssh -i /path/to/private-key user@host Connects using a specific private key.

Frequently Asked Questions about SSH in Linux

What is SSH used for?

SSH (Secure Shell) is primarily used for secure remote login to and management of servers, file transfers, and running commands on remote machines. It’s a vital tool in network administration, development, and system maintenance.

Is SSH secure?

Yes, SSH is designed to be secure. It uses encryption to secure data transmissions, preventing unauthorized access and eavesdropping. However, its security relies on proper configuration and management, like using strong passwords or SSH keys, and keeping the software up-to-date.

Can I use SSH to transfer files?

Absolutely! SSH provides a command called scp (Secure Copy Protocol) for transferring files securely between hosts. Additionally, there’s sftp (SSH File Transfer Protocol), which provides a file transfer interface similar to FTP.

How do I troubleshoot an SSH connection failure?

First, check if the SSH service is running on the remote host. Then, ensure you’re using the correct IP address, username, and authentication method (password or SSH key). Also, check for network issues, like firewalls blocking the SSH port (default is 22). Lastly, review the SSH log files (/var/log/auth.log on Ubuntu) for specific error messages.

Can I change the default SSH port?

Yes, you can change the default SSH port (22) to enhance security. Edit the /etc/ssh/sshd_config file on the server, change the Port line to your desired port, and restart the SSH service. Remember to update firewall rules to allow the new port.

How do I manage multiple SSH keys?

You can manage multiple SSH keys by creating a config file (~/.ssh/config) where you can specify which key to use for each host. This avoids the need to specify the key each time you connect.

Is it better to use SSH keys or passwords?

SSH keys are generally considered more secure than passwords. They are almost impossible to brute-force and are not susceptible to common attacks like keylogging. However, they must be kept secure, especially the private key.

Can I run graphical applications over SSH?

Yes, by using SSH with X11 forwarding (enabled with the -X option in the SSH client), you can run graphical applications on a remote server and display them on your local machine.

What is the difference between ssh-copy-id and scp for copying SSH keys?

ssh-copy-id is a utility specifically designed to install your public key in a remote machine’s ~/.ssh/authorized_keys. scp is a more general file copy utility that can be used to manually copy the key file, but it requires more steps and knowledge about the destination’s directory structure.

How do I keep my SSH connection alive?

To keep your SSH session from timing out, you can edit the ~/.ssh/config file on the client side and add the ServerAliveInterval option, which sends a null packet to the server every specified number of seconds to keep the connection active.

Conclusion

SSH is an incredibly powerful tool that’s a must-know for anyone working with Linux. While it might seem daunting at first, once you get the hang of it, you’ll find it’s a straightforward and secure way to manage remote systems. I hope this guide has demystified SSH for you and sparked an interest in exploring more of its capabilities.

Note that, while I’ve covered the basics here, there’s always more to learn about SSH and Linux. Keep exploring and experimenting!

You may also like

Leave a Comment

fl_logo_v3_footer

ENHANCE YOUR LINUX EXPERIENCE.



FOSS Linux is a leading resource for Linux enthusiasts and professionals alike. With a focus on providing the best Linux tutorials, open-source apps, news, and reviews written by team of expert authors. FOSS Linux is the go-to source for all things Linux.

Whether you’re a beginner or an experienced user, FOSS Linux has something for everyone.

Follow Us

Subscribe

©2016-2023 FOSS LINUX

A PART OF VIBRANT LEAF MEDIA COMPANY.

ALL RIGHTS RESERVED.

“Linux” is the registered trademark by Linus Torvalds in the U.S. and other countries.