DEV Community

Cover image for Configure SSH between your PC and mobile
Lovelin
Lovelin

Posted on

Configure SSH between your PC and mobile

You might call me old school, but I prefer downloading MP3 files and listening to them offline on my devices. Music streaming services never appealed to me more than my good old MP3 player.

The only thing that I used to sorely miss was syncing music files between my devices. I used to transfer MP3 through bluetooth or godforbid Whatsapp 😔

But now, I am syncing files across my devices using a utility called
rsync over an ssh connection.
All through the command line, what more a dev could ask for ✨

This post is a series of two parts, first part covering how to setup a ssh connection between your phone and PC and the second part, the better part, deals on utilizing Rsync to sync files between our devices bidirectionally! If you are good with SSH, then please skip this post and continue on the next part of the series.

Get Started

Hold on, let's see some theory first. They would be short, I promise, bear with me.

What is SSH btw?

SSH stands for Secure Shell—though the acronym might be a bit misleading, it’s a network protocol that creates a secure connection between a client and server using cryptographic techniques. To give you an idea, other network protocols are https, ftp, smptp and ssh is one of them.

How does it work?

Assume, two computers, one is a client and another one is a server. To initiate a connection, on the client side, we would using the server's ip address along with the username in which we need access. Here, there are two ways, in which we can initialize a successful connection to the server.

  • Using password based authentication - Simple, not so cool
  • Using ssh keys - Little bit complex, looks chad

In password-based authentication, when you try to connect to the server using it's IP address and username, it will prompt you to enter the password for the user which you are trying to access. Once verified, you will get the whole shell access of the server on your client. The downside is, you will be enter the password every time whenever you are trying to connect to the server.

In ssh-keys based authentication, you will be generating a cryptographic key-pair, a public key and the private key on the client. The private key stays on the client, and the public key is sent to the server in which you are accessing to. So whenever, you try to access the server, the server creates a math puzzle for you based on the public key you sent to it. This math puzzle can be only solved by the private key on your client, which results in a verified, secure connection between the client and server.

And that's enough theory for now!

Setting up the environment

To use SSH, you will need a ssh-daemon on both your phone and PC. Let's set up the PC first!

On Mac OS

SSH and the ssh-daemon comes preinstalled, no worries. Start the daemon by running



sudo systemsetup -setremotelogin on


Enter fullscreen mode Exit fullscreen mode

On Linux

Like Mac, most of the linux distributions has SSH and the daemon preinstalled.
If not, then run

For Fedora:



sudo dnf install openssh-server


Enter fullscreen mode Exit fullscreen mode

For Ubuntu:



sudo apt install openssh-server


Enter fullscreen mode Exit fullscreen mode

For Arch Linux:



sudo pacman -S openssh


Enter fullscreen mode Exit fullscreen mode

Then enable the SSH service to start at boot (applicable for all distros)



sudo systemctl enable sshd


Enter fullscreen mode Exit fullscreen mode

On Windows

Sheesh... I don't use windows. We can setup a SSH connection using the openssh-server, but I will suggest you to use WSL (Windows Subsystem for Linux) as this series would be more linux-focussed.

On Mobile

On android, install the Termux app from Fdroid. Termux is a UNIX-like terminal emulator for android without root access.

On IOS, there is a emulator called ISH which looks great. I haven't tried personally though, I couldn't afford an iphone. I will be using Termux on android for the rest of the post.

Let's really get started!

We will be initiating a SSH connection between our PC and android. To do this make sure you have connected both of them on the same network , like your home network or on your mobile hotspot. Although, SSH works perfectly fine for devices connected across different networks, it needs some heavy work like port forwarding on the router. We will be avoiding that for the blogsake, as our main motivation of doing all these is to listen to the music 🎵 🎵

On PC,

Open up your favourite terminal emulator and enter



whoami


Enter fullscreen mode Exit fullscreen mode

It will print your username. Note this one down.

Then for Linux and Mac, run



ifconfig


Enter fullscreen mode Exit fullscreen mode

For windows, run



ipconfig


Enter fullscreen mode Exit fullscreen mode

It will show you a lot of numbers, but the one we are interested is the IP address of our PC.

Check for network interfaces like eth0, wlan0, enp0s3, wl01 etc..
And within that there would be field called inet which has our ip address.

IP address on terminal when running ifconfig

For me, my ip address 192.168.1.6 is under the wlo1 network interface. Best bet, your IP address will also starts at 192.168.

Now we have both our username and IP address of our PC, let's move to android setup

On Android

Install the Termux app from fdroid

We need to give storage permissions for termux. Open the termux app and enter



termux-setup-storage


Enter fullscreen mode Exit fullscreen mode

Termux doesn’t come with an SSH daemon pre-installed, so you’ll need to set it up manually.



pkg install openssh termux-auth


Enter fullscreen mode Exit fullscreen mode

This will install the daemon and auth utility to setup a password for our termux user.

Start the SSH-Daemon by running



sshd


Enter fullscreen mode Exit fullscreen mode

Now run,



whoami


Enter fullscreen mode Exit fullscreen mode

you will see something like u0_a36. Copy this down, this is the username for our android.

And just like we did for PC, run



ifconfig


Enter fullscreen mode Exit fullscreen mode

and note down the IP address. Make sure you have connected both of your devices on the same network.

Now we have the username and IP address of both our PC and mobile.

It's about time to SSH!

To initate a connection from your mobile to your PC, open up termux and run



ssh <PC_username>@<PC_IPaddress> 


Enter fullscreen mode Exit fullscreen mode

It will prompt your for password, and once you are done with that, you can access your PC right from your mobile.

To initiate a connection from your PC to mobile, open up your favourite terminal emulator and run,



ssh -p 8022 <Mobile_username>@<Mobile_IPaddress> 


Enter fullscreen mode Exit fullscreen mode

The p flag here specifies which port is to be used to connect to termux. The default PORT that SSH uses is PORT 22, but on termux the PORT is 8022, so we need to manually pass 8022 as port. If no port is passed, then the PORT 22 is assumed by default.

You’ll be prompted for a password; once entered, you’ll gain access to your PC from your mobile device.

Setup Key-Based Authentication

Great, now we can access our devices from each other over SSH. Here, we will go a step deep. Let's use keys to authenticate each of our devices so we don't need to manually enter password each time. If you are good with how current things are, then you can safely skip this part.

We’ll generate a key pair (public and private) on each device and then exchange the public keys.

On Termux

To generate a key pair, run



ssh-keygen -t ed25519


Enter fullscreen mode Exit fullscreen mode

Accept the default location, name and leave the passphrase as empty. We won't be needing that for our usecase.

Here the ssh-keygen command generates a public and private key. The t flag specifies the type of key to be created, and we used the ed25519.
Other type of keys are rsa, ecdsa, dsa etc.

The key-pair is stored in the .ssh folder on the root. Run



tree .ssh


Enter fullscreen mode Exit fullscreen mode

And we will see something like this

.ssh folder file structure

  • id_ed25519 - Has the private key. This should never be shared with anyone. The id_ed25519 differs if you used some other type of key.

  • id_ed25519.pub - Stores the public key. We copy this key to the server we are accessing to. The id_ed25519.pub differs if you used some other type of key.

  • known_hosts - Stores the IP addresses along with the port and the base64 encoded public key of servers for which we have access to.

  • authorized_keys - It has the public keys of clients that are authorized to access our device.

Now we have generated a key-pair, we will be sending our public key to the PC. We can either manually copy the contents of id_ed25519.pub to the authorized_keys file on our PC or use ssh-copy-id utility.



ssh-copy-id -i .ssh/id_ed25519.pub <PC_username>@<PC_IPaddress> 


Enter fullscreen mode Exit fullscreen mode

This copies our public key to our PC.

We can simply use ssh <PC_username@<PC_IPaddress> to access our PC on our mobile.

On PC

Now to access our mobile from our PC, we just going to repeat the same steps but from our PC end.

Generate a key-pair



ssh-keygen -t ed25519


Enter fullscreen mode Exit fullscreen mode

We can see the newly generated key-pair on the ~/.ssh folder.
We will be sending the generated public key on our PC to our phone, by running



ssh-copy-id -i ~/.ssh/id_ed25519.pub <Mobile_username>@<Mobile_IPaddress> 


Enter fullscreen mode Exit fullscreen mode

Great, we can access each of our devices from one another over SSH without entering the password each time.

Try doing this on mobile



ssh <PC_username>@<PC_IPaddress>


Enter fullscreen mode Exit fullscreen mode

and this one in your PC



ssh -p 8022 <Mobile_username>@<Mobile_IPaddress>


Enter fullscreen mode Exit fullscreen mode

Setup Host Aliases

Life's good, but it still sucks to enter the username and IP address each time, we can also skip this part by setting an alias.

Let's create a new file in the .ssh folder on both the PC and mobile.

Create the config file on both the devices



vi .ssh/config


Enter fullscreen mode Exit fullscreen mode

Add these lines

For the config file in PC,



Host myGoodPhone
    HostName <Mobile_IPaddress>
    User <Mobile_username>
    Port 8022


Enter fullscreen mode Exit fullscreen mode

and for the config file in mobile,



Host myGoodPC
    HostName <PC_IPaddress>
    User <PC_username>


Enter fullscreen mode Exit fullscreen mode

save and exit the file.

Now, on mobile, we can just do



ssh myGoodPC


Enter fullscreen mode Exit fullscreen mode

and on PC



ssh myGoodPhone


Enter fullscreen mode Exit fullscreen mode

Remember, when you change the network in which your devices are connected, then these aliases won't work because they IP address differs. So you may need to upate these, setup a new alias, or manually enter username and IP address to connect.

Conclusion

Phew, that's was quite a labour, but here’s a quick recap…

  • What is SSH, and how it works on a high level
  • Setup the PC and mobile for SSH connection
  • Setup key-based authentication between devices
  • Added host aliases for our devices.

So we have our SSH connection all oiled and ready to go. In the next post on the series, we will see how can we use Rsync to sync our music files, bidirectionally. See ya, on the next tab.

Cover image by Namroud Gorguis on Unsplash

Top comments (0)