How to Transfer Files over SSH in Linux

Secure Shell (SSH) is a cryptographic network protocol designed to facilitate secure communication between two hosts over an unsecured network. By offering robust encryption, authentication, and integrity, SSH has become a widely adopted solution for remote access, file transfers, and network device management. This article will guide you through setting up SSH access and demonstrate how to transfer files securely using SCP or SFTP commands, complete with examples to help you get started.

Understanding SSH

SSH Key Concepts

SSH relies on public-key cryptography for secure communication. In this system, a key pair consisting of a public key and a private key is used. The public key is used for encryption, while the private key is used for decryption. This ensures that only the intended recipient can decrypt the data, as they possess the corresponding private key.

SSH keys are typically employed for user and host authentication, ensuring that only authorized parties can access the system. This method of authentication is more secure than using passwords, as SSH keys are less susceptible to brute-force attacks.

Setting Up SSH Access

To transfer files securely over SSH, you must first set up SSH access between the source and destination systems. This process typically involves the following steps:

  1. Generating an SSH key pair: First, create an SSH key pair on the source system. This can be done using the ssh-keygen command. The key pair consists of a public key, which will be shared with the destination system, and a private key, which must be kept secret and secure on the source system.
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Replace “your_email@example.com” with your actual email address.

  1. Copying the public key to the destination system: Once you’ve generated the SSH key pair, you need to copy the public key to the destination system’s authorized_keys file. This file is typically located in the ~/.ssh/ directory of the remote user’s home directory. You can use the ssh-copy-id command to copy the public key:
ssh-copy-id user@destination

Replace “user” with the appropriate remote user account name and “destination” with the destination system’s IP address or hostname.

  1. Testing the SSH connection: After copying the public key, test the SSH connection to ensure it’s set up correctly:
ssh user@destination

Replace “user” and “destination” as mentioned in the previous step. If the setup is successful, you will be able to access the destination system without entering a password.

Transferring Files Using SCP

SCP Overview

Secure Copy Protocol (SCP) is a file transfer utility that leverages the security of SSH (Secure Shell) to transfer files and directories between local and remote systems and between two remote systems. SCP ensures that your data is transferred securely, making it a reliable option for managing files across different systems.

Understanding SCP Commands

Before diving into the SCP syntax, it is essential to understand its components and their functions:

  1. scp: This is the command that initiates the SCP process.
  2. [options]: These are any additional flags or parameters you may want to use to customize the transfer process.
  3. [source]: This represents the file or directory you wish to transfer.
  4. [destination]: This indicates the target location for the transferred file or directory.

When the SCP command is executed, it initiates a secure connection between the local and remote systems using SSH. The file transfer begins, and progress information is displayed in the terminal. Once the transfer is complete, the connection is closed, and a confirmation message is displayed.

SCP Syntax and Usage

Basic SCP Syntax

The fundamental syntax for using SCP is:

scp [options] [source] [destination]

SCP Options

SCP offers various options that allow you to customize the file transfer process. Some of the commonly used options include:

  • -r: Recursively transfer directories and their contents.
  • -P [port]: Specify a custom SSH port number if the remote system uses a non-default port.
  • -p: Preserve file attributes such as timestamps and permissions.
  • -C: Enable compression to speed up the transfer process for large files.

SCP Examples

Example 1: Transferring a File to a Remote System

To transfer a file named “file.txt” from your local system to a remote system with the IP address 192.168.1.100, you can use the following command:

scp file.txt user@192.168.1.100:/path/to/destination

In this command, replace user with the appropriate username for the remote system and /path/to/destination with the desired destination path on the remote system.

Example 2: Transferring a Directory to a Remote System

To transfer a directory named “directory” and its contents from your local system to a remote system, use the -r option:

scp -r directory user@192.168.1.100:/path/to/destination

Replace user and /path/to/destination as mentioned in Example 1.

Example 3: Transferring a File from a Remote System to the Local System

To transfer a file named “file.txt” from a remote system with the IP address 192.168.1.100 to your local system, use the following command:

scp user@192.168.1.100:/path/to/source/file.txt /path/to/local/destination

Replace user, /path/to/source, and /path/to/local/destination with the appropriate remote username, remote source path, and local destination path, respectively.

Example 4: Transferring a File Between Two Remote Systems

To transfer a file named “file.txt” from one remote system to another, use the following command:

scp user1@192.168.1.100:/path/to/source/file.txt user2@192.168.2.100:/path/to/destination

Replace user1, user2, /path/to/source, and /path/to/destination with the appropriate usernames and file paths for the source and destination remote systems.

Transferring Files Using SFTP

SFTP Overview

SFTP (Secure File Transfer Protocol) is a secure and reliable file transfer protocol that uses SSH (Secure Shell) to transfer files and directories between local and remote systems, as well as between two remote systems. SFTP provides a secure and encrypted connection for transferring files, ensuring data integrity and confidentiality.

Understanding SFTP Commands

Before diving into the SFTP syntax and usage, it is essential to understand its components and their functions:

  1. sftp: This is the command that initiates the SFTP process.
  2. [options]: These are any additional flags or parameters you may want to use to customize the connection process.
  3. user@host: This represents the remote system’s username and IP address or hostname, separated by an ‘@’ symbol.

When the SFTP command is executed, it initiates a secure connection between the local and remote systems using SSH. An interactive SFTP session starts, allowing you to manage files and directories on the remote system.

SFTP Syntax and Usage

Basic SFTP Syntax

The fundamental syntax for connecting to a remote system using SFTP is:

sftp [options] user@host

SFTP Options

SFTP offers various options that allow you to customize the connection process. Some of the commonly used options include:

  • -P [port]: Specify a custom SSH port number if the remote system uses a non-default port.
  • -o: Provide additional SSH options, such as IdentityFile for specifying an SSH key file.

SFTP Examples

Example 1: Connecting to a Remote System

To connect to a remote system with the IP address 192.168.1.100, you can use the following command:

sftp user@192.168.1.100

Replace user with the appropriate username for the remote system.

Example 2: Connecting to a Remote System Using a Custom SSH Port

To connect to a remote system with the IP address 192.168.1.100 using a custom SSH port number, such as 2222, use the -P option:

sftp -P 2222 user@192.168.1.100

Replace user as mentioned in Example 1.

SFTP Commands for File Transfer and Management

Once connected to the remote system using SFTP, you can use various commands to transfer and manage files and directories. Here are some commonly used SFTP commands:

  • put [local_file] [remote_destination]: Upload a file from your local system to the remote system.
  • get [remote_file] [local_destination]: Download a file from the remote system to your local system.
  • ls: List files and directories in the current remote directory.
  • lls: List files and directories in the current local directory.
  • cd [remote_directory]: Change the current remote directory.
  • lcd [local_directory]: Change the current local directory.
  • mkdir [remote_directory]: Create a new directory on the remote system.
  • rmdir [remote_directory]: Remove a directory on the remote system.
  • rm [remote_file]: Remove a file on the remote system.
  • rename [old_name] [new_name]: Rename a file or directory on the remote system.
  • bye or exit: Close the SFTP session and exit.

SFTP Workflow Example

Here is a step-by-step example of an SFTP workflow, demonstrating how to connect to a remote system, navigate directories, and transfer files:

  1. First, connect to the remote system by entering the following command:
sftp user@192.168.1.100

In this command, replace user with the appropriate username for the remote system. Upon successful connection, you will enter the interactive SFTP session.

  1. Next, change to the desired remote directory where you want to upload or download files. To do this, use the cd command:
cd /path/to/remote/directory

Replace /path/to/remote/directory with the correct path on the remote system.

  1. To view the files and directories in the current remote directory, use the ls command:
ls

This command will display a list of files and directories in the remote directory you navigated to in the previous step.

  1. If you want to change your local directory, use the lcd command:
lcd /path/to/local/directory

Replace /path/to/local/directory with the correct path on your local system. This step is useful when you want to upload or download files to a specific directory on your local system.

  1. To upload a file from your local system to the remote system, use the put command:
put local_file remote_destination

Replace local_file with the name of the file you want to upload from your local system, and remote_destination with the desired location and name for the file on the remote system.

  1. To download a file from the remote system to your local system, use the get command:
get remote_file local_destination

Replace remote_file with the name of the file you want to download from the remote system, and local_destination with the desired location and name for the file on your local system.

  1. Once you have finished transferring files and managing directories, you can close the SFTP session and exit. To do this, enter the bye or exit command:
bye

or

exit

This command will close the SFTP session and return you to your local system’s command prompt.

Conclusion

Transferring files securely over SSH is an essential skill for managing Unix-based systems. SCP and SFTP are two widely-used methods for transferring files over SSH, each offering its unique advantages. By following the tips and examples provided in this article, you can efficiently transfer files between systems

Additional Resources and Links

To further enhance your knowledge and explore more advanced topics related to SSH, file transfers, and Linux, we have compiled a list of additional resources and links below:

  • OpenSSH official website: OpenSSH is the primary implementation of the SSH protocol. Visit their official website to find the latest releases, documentation, and other resources related to SSH: https://www.openssh.com/
  • Linux man pages for SCP and SFTP: Consult the official Linux manual pages for in-depth information on SCP and SFTP commands, options, and usage examples: SCP man page and SFTP man page