Keepalive ssh sessions for longer durations


In general most of the ISP providers will terminate idle sessions as early as possible(maybe in a couple of minutes).

This will be an irritating thing if you work on a remote server with ssh. I had a similar issue with my ISP(Act Fibernet). To fix this issue I have experimented in multiple ways and I am sharing the easiest way to that works.

Add following lines in your /etc/ssh/sshd_config file:

ClientAliveInterval 60
ClientAliveCountMax 5

where ClientAliveInterval 60 seconds will send a null request from your node(client) to server every 60 seconds. ClientAliveCountMax 5 is to give up if it doesn’t receive any response after 5 retries.

After adding the above configurations restart ssh with the following command:

sudo service ssh restart

You can try with different values for ClientAliveInterval based on your ISP. In general most of the ISP’s will persist idle sessions for a couple of minutes. In my case Act Fibernet sessions are not responding after 2 minutes(approximately), so I used 60 seconds.


ssh disable warning messages – Linux/Ubuntu

To disable ssh warning message we need to add LogLevel to quiet in $HOME/.ssh/config file.


We can also diable warning messages with ssh command as shown below:

$ ssh -o LogLevel=quiet

With following example we can also disable Host Key Checking, set known hosts file to null and disable logging:

$ ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet

ssh remove offending key – Linux/Ubuntu


ssh-keygen command is used to remove offending key entries from .ssh/known_hosts

Syntax to remove offending key of a host:

$ ssh-keygen -R hostName/IP_Address

Example 1:

$ ssh-keygen -R

Above example will remove ssh key associated with hostname

Example 2:

$ ssh-keygen -R

This example will remove ssh key associated with IP Address

SCP download multiple files


In general we will download one file at a time from remote file using scp.

We can also download multiple files/directories at once using scp command.

Here is the example to download multiple files/directories at once with scp:

$ scp -r user@ip-address:"/path/to/file /path/to/directory" /destination/path/

Above command will download both file and directory to destination path.


Enable/Disable ssh access to root

Its always better to disable ssh access to root user which will protect the server from any attacks. Its kind of additional security layer on top of firewall.

There are 2 ways to disable SSH access to root.

With DenyUsers:

In /etc/ssh/sshd_config file search for line DenyUsers, if it exists edit it as follows else add following line:

DenyUsers root

If you want to disable ssh login for multiple users on the server add as following:

DenyUsers root user1 user2 user3

After updating sshd_config add restart sshd service with following command:

$ service sshd restart

Now try to ssh to root, it should not allow login even though you entered right password.

With PermitRootLogin:

PermitRootLogin will support 2 options “yes” and “no”.

Option yes will allow ssh to root and option no wont allow ssh to root.

To allow ssh to root add following line in /etc/ssh/sshd_config file and restart sshd service:

PermitRootLogin yes

To disable ssh to root add following line in /etc/ssh/sshd_config file and restart sshd service:

PermitRootLogin no


Enable multiple ssh ports Linux


By default only one port (port number 22) will be enabled as ssh/scp port in Linux

To enable multiple ssh ports we need to tweak /etc/ssh/sshd_config file.

Open /etc/ssh/sshd_config with any editor and search for line Port 22. Below this line add a new port which you want to use.

Example: I would like to use 12345 as another ssh port, add it as shown below.

Port 22

Port 12345

Save and exit from /etc/ssh/sshd_config file.

Restart sshd service with following command:

$ service sshd restart

After restarting sshd service test try to login/ssh with new port 12345, it should work.

You can also check list of ports opened for ssh using following command where you can see port 22 and 12345 in output:

$ netstat -anp | grep ssh


tcp 0 0 :::22 :::* LISTEN 3075/sshd
tcp 0 0 :::12345 :::* LISTEN 3075/sshd


Linux write/append to remote file using ssh

To append content of a file in a remote server’s file use following command:

$ cat input.txt| ssh hostname 'cat >> output.txt'

To append some text in remote servers file use following command:

$ echo "Your text here" | ssh hostname 'cat >> output.txt'

Where input.txt is input file, hostname is remote Linux machine hostname or ip address, and output.txt is output file in remote machine.


Linux SSH without password


Whenever we login into remote server with ssh, it requires password authentication.

Let’s try to ssh check that you can ssh to the local host.

$ ssh localhost

By default it should ask for password.

To login without password we need to generate ssh keys, to generate use following command:

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

Above command will create 2 files id_dsa, and in .ssh directory which is located in home directory.

Now copy to authorized_keys.

$ cat ~/.ssh/ >> ~/.ssh/authorized_keys

Then try to ssh to your local host, it shouldn’t ask for password.

Similarly to login into a remote server copy content into remote server ~/.ssh/authorized_key file. Use following command to copy.

$ cat | ssh user@serverName/IP 'cat >> .ssh/authorized_keys'

Some recent version’s of ssh requires following permissions and authorized_keys2:

  • Put the public key in .ssh/authorized_keys2 
    • $ cp .ssh/authorized_keys .ssh/authorized_keys2
  • Change permission of .ssh directory to 700
    • $ chmod 700 .ssh
  • Change permission of .ssh/authorized_keys2 to 640
    • $ chmod 640 .ssh/authorized_keys2