Using SSH to Access Raspberry Pi Remotely: Remote Control and File Transfer

Learn how to access your Raspberry Pi remotely using SSH. Master remote control, file transfer, and secure internet access for your Pi projects.

Credit: Denis N. | Unsplash

The Raspberry Pi is an incredibly versatile tool for a wide range of projects, but working directly on the device can sometimes be inconvenient. Whether it’s due to limited access to peripherals like a monitor or keyboard, or the need to work on the Raspberry Pi from a different location, Secure Shell (SSH) offers a solution. SSH is a secure protocol that enables remote access to your Raspberry Pi’s command line, allowing you to control the device, run commands, and transfer files seamlessly over a network.

This guide will walk you through setting up SSH, accessing your Raspberry Pi remotely, and performing essential tasks such as remote control and file transfer.

What is SSH and Why Use It with Raspberry Pi?

SSH (Secure Shell) is a cryptographic network protocol that provides secure remote login and file transfer between computers. For Raspberry Pi users, SSH offers several advantages:

  • Headless Operation: Use the Raspberry Pi without a monitor, keyboard, or mouse.
  • Convenience: Access the Pi from anywhere within the same network—or even remotely if properly configured.
  • Efficiency: Run commands and scripts directly from your primary machine.
  • File Transfer: Transfer files quickly without relying on external storage devices.

SSH is particularly useful for IoT applications, server setups, and development projects where physical access to the Raspberry Pi is not feasible.

Setting Up SSH on Raspberry Pi

Before using SSH, you need to enable it on your Raspberry Pi and configure your network.

1. Enable SSH

By default, SSH is disabled on Raspberry Pi OS for security reasons. Here’s how to enable it:

a. Using the Raspberry Pi Configuration Tool:

  • If you have access to the Raspberry Pi desktop, open the Raspberry Pi Configuration tool from the Start menu.
  • Navigate to the Interfaces tab.
  • Enable the SSH option and click OK.

b. From the Command Line:

  • Open a terminal on your Raspberry Pi.
  • Run the following command:
sudo raspi-config

c. Enabling SSH on a Headless Setup:

  • If you’re setting up the Raspberry Pi without a monitor or keyboard:
    • Insert the microSD card into your computer.
    • Navigate to the boot partition of the card.
    • Create an empty file named ssh (no file extension).
    • Insert the microSD card into the Raspberry Pi and boot it up. SSH will be enabled automatically.

2. Find the Raspberry Pi’s IP Address

To connect via SSH, you need the Raspberry Pi’s IP address. Here are a few ways to find it:

  • On the Raspberry Pi: Open a terminal and type:
hostname -I

The IP address will be displayed (e.g., 192.168.1.100).

  • From Your Router: Access your router’s administration page to find the connected devices and their IP addresses.
  • Using Network Scanning Tools: On your main computer, use tools like nmap or mobile apps like Fing to scan your network for devices.

3. Install an SSH Client

To connect to your Raspberry Pi, you need an SSH client on your computer:

  • Linux/macOS: SSH is built into the terminal. You can access it by typing the ssh command.
  • Windows:
    • Use the built-in SSH client available via PowerShell or Command Prompt.
    • Alternatively, install a third-party client like PuTTY.

Connecting to Your Raspberry Pi via SSH

Once SSH is enabled, and you have the IP address, follow these steps to connect to your Raspberry Pi:

1. Open an SSH Client:

  • On Linux/macOS: Open the terminal.
  • On Windows: Open PowerShell, Command Prompt, or PuTTY.

2. Run the SSH Command:

ssh pi@<Raspberry_Pi_IP>

Replace <Raspberry_Pi_IP> with your Raspberry Pi’s actual IP address (e.g., ssh pi@192.168.1.100).

3. Enter the Default Credentials:

  • Username: pi
  • Password: raspberry (or the password you set during setup).

4. Verify the Host Key: On your first connection, you may see a message like:

The authenticity of host '192.168.1.100' can't be established.

Type yes to proceed.

5. You’re Connected: Once authenticated, you’ll see the Raspberry Pi’s command-line prompt:

pi@raspberrypi:~ $

Basic SSH Commands for Remote Control

Now that you’re connected, you can control the Raspberry Pi directly from your computer.

System Information

uname -a       # Displays system information
uptime         # Shows how long the Raspberry Pi has been running
df -h          # Displays available disk space

Managing Files and Folders

ls             # Lists files and folders in the current directory
mkdir myfolder # Creates a new folder named 'myfolder'
rm file.txt    # Deletes a file named 'file.txt'

Updating the System

sudo apt update && sudo apt upgrade

Restarting or Shutting Down

sudo reboot    # Restarts the Raspberry Pi
sudo poweroff  # Shuts down the Raspberry Pi

Transferring Files to and from Raspberry Pi Using SSH

SSH isn’t just for remote control; it also facilitates secure file transfer using tools like SCP and SFTP. These protocols allow you to move files between your Raspberry Pi and your computer securely over the network.

Using SCP (Secure Copy Protocol)

SCP is a command-line tool for transferring files securely over SSH.

1. Copying Files from Your Computer to Raspberry Pi

To copy a file named example.txt to the Raspberry Pi’s home directory:

scp example.txt pi@<Raspberry_Pi_IP>:/home/pi/

2. Copying Files from Raspberry Pi to Your Computer

To copy a file named data.csv from the Raspberry Pi to your local machine:

scp pi@<Raspberry_Pi_IP>:/home/pi/data.csv

3. Copying Directories

To copy an entire directory named projects from your computer to the Raspberry Pi:

scp -r projects pi@<Raspberry_Pi_IP>:/home/pi/

Tips:

  • Use -v for verbose output to debug transfer issues.
  • Always ensure the destination folder exists on the Raspberry Pi.

Using SFTP (Secure File Transfer Protocol)

SFTP provides an interactive interface for secure file transfer over SSH.

1. Starting an SFTP Session Run the following command to connect to the Raspberry Pi:

sftp pi@<Raspberry_Pi_IP>

2. Basic SFTP Commands Once connected, use these commands:

  • ls – List files on the Raspberry Pi.
  • lcd – Change the local directory on your computer.
  • get filename – Download a file from the Raspberry Pi.
  • put filename – Upload a file to the Raspberry Pi.
  • bye or exit – Exit the SFTP session.

Example: To upload script.py from your local machine to the Raspberry Pi’s /home/pi directory:

put script.py

Setting Up SSH Key-Based Authentication

Using SSH keys instead of passwords enhances security and convenience, especially if you frequently access your Raspberry Pi.

1. Generate an SSH Key Pair

On your local machine, generate an SSH key pair:

ssh-keygen -t rsa -b 4096

You’ll be prompted to specify a file location for the keys. Press Enter to save the keys in the default location. You can also set a passphrase for additional security.

2. Copy the Public Key to Raspberry Pi

To copy your public key to the Raspberry Pi, use the following command:

ssh-copy-id pi@<Raspberry_Pi_IP>

You’ll be prompted to enter the password for the pi user. After this, your key will be added to the Raspberry Pi’s /authorized_keys file.

3. Test Key-Based Login

Log in to the Raspberry Pi using SSH. If key-based authentication is set up correctly, you won’t need to enter the password:

ssh pi@<Raspberry_Pi_IP>

4. Disable Password Authentication (Optional)

For maximum security, you can disable password-based SSH login. Edit the SSH configuration file on the Raspberry Pi:

sudo nano /etcx/ssh/sshd_config

Find and set the following parameters:

PasswordAuthentication no
PermitRootLogin no

Save the file and restart the SSH service:

sudo systemctl restart ssh

Note: Ensure you’ve successfully set up and tested key-based authentication before disabling password login.

Managing Multiple SSH Sessions

If you work on multiple Raspberry Pi devices, managing SSH connections can become cumbersome. Here are tips to simplify your workflow:

1. SSH Config File

Create an SSH configuration file on your local machine to streamline connections:

nano ~/.sshx/config

Add an entry for each Raspberry Pi:

Host raspberrypi
    HostName 192.168.1.100
    User pi
    IdentityFile ~/.sshx/id_rsa

Now, you can connect using a simple command:

ssh raspberrypi

2. Multiplexing SSH Connections

Enable SSH connection multiplexing to reuse a single connection for multiple sessions:

  • Edit your SSH config file (~/.sshx/config) and add:
Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 10m
  • Create the ~/.sshx/sockets/directory:
mkdir -p ~/.ssh/sockets

This reduces connection time for subsequent sessions.

Troubleshooting Common SSH Issues

Despite its reliability, SSH connections may encounter problems. Here’s how to address common issues:

1. Connection Refused

  • Cause: SSH is not enabled on the Raspberry Pi.
  • Solution: Verify SSH is enabled by running:
mkdir -p ~/.ssh/sockets

2. Host Key Mismatch

  • Cause: The Raspberry Pi’s IP address or hostname changed.
  • Solution: Remove the old key from /known_hosts:
ssh-keygen -R <Raspberry_Pi_IP>

3. Authentication Failed

  • Cause: Incorrect credentials or key configuration.
  • Solution:
    • Double-check the username and password.
    • Ensure your SSH public key is in /authorized_keys.

4. Timeouts

  • Cause: Network instability or incorrect firewall settings.
  • Solution:
    • Verify the Raspberry Pi is reachable:
ping <Raspberry_Pi_IP>

Check the SSH port is open (default is port 22).

Setting Up Remote SSH Access

Remote SSH access allows you to control your Raspberry Pi from anywhere. To set this up securely, follow these steps:

1. Configure Port Forwarding

Port forwarding redirects incoming traffic on a specific port to your Raspberry Pi’s local IP address. Most routers support port forwarding, though the process varies by model.

Steps:

  1. Log in to your router’s admin interface.
  2. Locate the port forwarding section (often under “Advanced” or “Firewall”).
  3. Create a new rule:
    • External Port: 22 (or another unused port, e.g., 2222, for added security).
    • Internal Port: 22.
    • Protocol: TCP.
    • Internal IP: Your Raspberry Pi’s local IP address (e.g., 192.168.1.100).
  4. Save the rule and restart your router if necessary.

Accessing the Raspberry Pi:

  • To SSH into your Raspberry Pi remotely, use your public IP address:
ssh pi@<Your_Public_IP> -p <Forwarded_Port>

Example:

ssh pi@203.0.113.1 -p 2222

Important: Avoid using the default port 22 for external access to reduce the risk of unauthorized login attempts.

2. Use Dynamic DNS (DDNS)

Most internet service providers assign dynamic public IP addresses that can change periodically. Dynamic DNS links a domain name to your current IP address, making it easier to connect remotely.

Steps:

  1. Sign up for a free DDNS service like No-IP or DuckDNS.
  2. Set up a hostname (e.g., mypi.ddns.net).
  3. Install the DDNS client on your Raspberry Pi or router to automatically update the IP address.

Accessing the Raspberry Pi:

  • Use the DDNS hostname instead of the public IP:
ssh pi@mypi.ddns.net -p <Forwarded_Port>

3. Enhance Security with Fail2Ban

Remote SSH access increases the risk of unauthorized login attempts. Fail2Ban is a security tool that blocks IP addresses after repeated failed login attempts.

Install Fail2Ban:

sudo apt update
sudo apt install fail2ban

Enable Fail2Ban for SSH:

  • Create or edit the SSH jail configuration file:
sudo nano /etc/fail2ban/jail.local
  • Add the following:
[sshd]
enabled = true
port = 22
maxretry = 5
bantime = 3600
  • Restart Fail2Ban:
sudo systemctl restart fail2ban

Using Secure Tunneling for Remote Access

If you want a more secure alternative to port forwarding, consider tunneling tools like ngrok or ZeroTier.

1. Remote Access with Ngrok

Ngrok creates a secure tunnel to your Raspberry Pi, making it accessible remotely without exposing your network.

Steps:

a. Install Ngrok:

  • Sign up at ngrok.com and download the tool.
  • Extract the Ngrok binary and move it to /local/bin:
wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-stable-linux-arm.zip
unzip ngrok-stable-linux-arm.zip
sudo mv ngrok /usr/local/bin

b. Start an SSH Tunnel:

ngrok tcp 22

Ngrok will provide a forwarding address (e.g., tcp://1.tcp.ngrok.io:12345).

c. Access the Raspberry Pi:

Benefits:

  • No need to configure port forwarding.
  • Provides an encrypted connection.

2. Remote Networking with ZeroTier

ZeroTier creates a virtual private network (VPN), allowing you to access your Raspberry Pi as if it were on the same local network.

Steps:

a. Install ZeroTier on Raspberry Pi:

curl -s https://install.zerotier.com | sudo bash

b. Join a ZeroTier network:

sudo zerotier-cli join <network_id>

c. Install ZeroTier on your remote computer and join the same network.

sudo zerotier-cli join <network_id>

Accessing the Raspberry Pi:

  • Use the ZeroTier-assigned IP address to SSH into your Raspberry Pi:
ssh pi@<ZeroTier_IP>

Benefits:

  • No public IP or port forwarding required.
  • Secure, private communication.

Additional Tools to Enhance SSH Workflow

1. tmux (Terminal Multiplexer)

When working on long-running processes via SSH, a dropped connection can interrupt your tasks. tmux allows you to run and resume terminal sessions.

Install tmux:

sudo apt install tmux

Start a New Session:

tmux

Detach a Session: Press Ctrl+b, then d.

Reattach a Session:

tmux attach

2. rsync for Efficient File Synchronization

rsync is a powerful tool for syncing files between your Raspberry Pi and another machine.

Basic Usage: To sync a local folder to your Raspberry Pi:

rsync -avz /path/to/local/folder pi@<Raspberry_Pi_IP>:/path/to/destination/

Benefits:

  • Transfers only changed files, saving bandwidth and time.

Troubleshooting Remote SSH Access

Even with proper configurations, remote SSH access can occasionally fail. Here’s how to troubleshoot common issues:

1. Unable to Connect

  • Verify the Raspberry Pi is online and reachable:
ping <Raspberry_Pi_IP>
  • Check if the SSH service is running:
sudo systemctl status ssh

2. Connection Timeouts

  • Ensure the correct port is forwarded.
  • Verify the Raspberry Pi’s firewall isn’t blocking SSH:
sudo ufw allow 22

3. Incorrect Credentials

  • Double-check the username, password, or SSH key used.

Conclusion

SSH transforms how you interact with your Raspberry Pi, enabling remote control, file transfer, and even internet access. By mastering SSH basics and exploring advanced tools like port forwarding, tunneling, and secure file synchronization, you can fully leverage the potential of your Raspberry Pi for development, automation, and IoT projects.

Share:
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments

Discover More

The Role of Data Science in Today’s World: A Beginner’s Guide

Explore data science careers, essential skills, and learning paths in this beginner’s guide. Learn how…

Introduction to Java Methods: Defining and Calling Methods

Learn how to define and call methods in Java. Explore advanced topics like method overloading,…

Essential Skills for Data Scientists: A Beginner’s Checklist

Discover the essential skills for data scientists, from programming to machine learning. A beginner’s guide…

The Current: A Beginner’s Guide

Explore the basics of electric current, its role in powering electronics, and the differences between…

Customizing Your Linux Desktop Environment

Learn how to customize your Linux desktop environment, from themes and widgets to tiling window…

Getting Started with Microsoft Windows: A Beginner’s Guide

Learn how to get started with Microsoft Windows, explore key features, settings, and tips for…

Click For More
0
Would love your thoughts, please comment.x
()
x