Magic Wormhole: Secure and Easy File Transfer in Ubuntu



In today’s digital age, the need to transfer files between devices securely and effortlessly is a common requirement. Ubuntu, one of the most popular Linux distributions, offers a powerful tool called Magic Wormhole that simplifies the process of file transfer while ensuring end-to-end encryption. In this article, we will explore the features and usage of Magic Wormhole, and how it can be leveraged to securely transfer files in Ubuntu.

What is Magic Wormhole?

Magic Wormhole is a command-line tool that facilitates encrypted and temporary file transfers between devices. It provides a secure alternative to traditional file transfer methods and removes the complexities associated with network configurations. With Magic Wormhole, you can effortlessly send files from one Ubuntu device to another, even if they are on different networks.


Before diving into file transfers, let’s start by installing Magic Wormhole. Open a terminal in Ubuntu and run the following command:

$ sudo apt install magic-wormhole

Sending Files

To send a file using Magic Wormhole, navigate to the directory where the file is located in the terminal. Then, enter the following command:

$ wormhole send <file_path>

Replace <file_path> with the actual path and name of the file you want to send. Once executed, Magic Wormhole will generate a unique code (a series of words) and display it on the screen.

For example, let’s say you want to send a file named “example.pdf” located in the “Documents” folder. The command would look like this:

$ wormhole send ~/Documents/example.pdf

After executing the command, Magic Wormhole will generate a code like “1-hello-rainbow.” Make a note of this code, as you will need it for the receiver to initiate the file transfer.

Receiving Files

On the receiving Ubuntu device, open a terminal and run the following command:

$ wormhole receive

This command prompts you to enter the code generated by the sender. Simply copy the code from the sender’s terminal and paste it into the receiver’s terminal. Magic Wormhole will establish a secure connection between the two devices.

For example, if the sender’s code is “1-hello-rainbow,” you would enter it as follows:

$ wormhole receive 1-hello-rainbow

Once the code is entered, Magic Wormhole will establish a connection and begin the file transfer process. You can also use wormhole for sending directories as well all you need to do is to provide the directory path instead of the file and now you can send an entire directory to a remote machine.

Establishing the Connection

Magic Wormhole utilizes a relay server to facilitate the initial connection setup between the sender and receiver.

In Magic Wormhole, the connection between the sender and receiver is established through a relay server. The relay server acts as an intermediary that helps facilitate the initial connection setup between the devices. Here’s a simplified overview of the connection establishment process:

  1. Sender Side: When the sender initiates the file transfer using the wormhole send command, Magic Wormhole generates a unique code (a series of words) that acts as a cryptographic key. The sender’s Magic Wormhole client then contacts the relay server and uploads the encrypted file metadata and the generated code.
  2. Receiver Side: The receiver runs the wormhole receive command and also contacts the relay server to indicate that it is ready to receive the file. The relay server provides the receiver with information about the available sender (identified by the code) and the file metadata.
  3. Connection Negotiation: The sender and receiver both retrieve the necessary connection details from the relay server. This includes information such as IP addresses, ports, and encryption keys.
  4. Direct Connection: Once the sender and receiver have the necessary connection details, they establish a direct peer-to-peer connection between themselves. This direct connection bypasses the relay server, ensuring faster and more efficient data transfer.
  5. File Transfer: With the direct connection established, the encrypted file data is transferred directly from the sender to the receiver. Magic Wormhole handles the encryption and decryption of the file data, ensuring its security during transit.

Once the connection is established, the file transfer occurs directly between the devices, bypassing the relay server. This ensures faster and more efficient data transfer.

Encryption and Security

Magic Wormhole employs end-to-end encryption, ensuring that your files are securely transmitted. The file data is encrypted before being sent, and only the intended recipient can decrypt and access the files. Furthermore, Magic Wormhole generates a unique code for each file transfer, adding an extra layer of security to the process.

It’s important to note that Magic Wormhole’s reliance on a relay server is temporary and limited to the initial connection setup. The relay server doesn’t have access to the actual file data being transferred since it’s encrypted. The server’s role is primarily to facilitate the initial handshake and help the sender and receiver establish a direct connection.

By using end-to-end encryption and leveraging a relay server for connection initiation, Magic Wormhole provides a convenient and secure method for establishing file transfers between devices.


Magic Wormhole offers a user-friendly and secure solution for file transfer in Ubuntu. Its simplicity and emphasis on encryption make it an ideal choice for individuals and organizations that prioritize data security. By leveraging Magic Wormhole’s capabilities, you can easily send files between Ubuntu devices without the need for complex network configurations or compromising on security.

Give Magic Wormhole a try, and experience the convenience and peace of mind it brings to your file transfer needs in Ubuntu!

Note: Magic Wormhole is not limited to Ubuntu and can be used on various platforms, including other Linux distributions and macOS.


Prabodh C P is a faculty in the Dept of CSE SIT, Tumkur and also currently a Research Scholar pursuing PhD in IIT Hyderabad. He conducts online classes for C, C++, Python. For more info call +919392302100

Leave a Reply

Your email address will not be published. Required fields are marked *