Skip to content

Instantly share code, notes, and snippets.

@stevewithington
Forked from slowkow/ssh-tutorial.md
Created September 2, 2022 19:33
Show Gist options
  • Save stevewithington/02598202805f5da158711e7bf507376f to your computer and use it in GitHub Desktop.
Save stevewithington/02598202805f5da158711e7bf507376f to your computer and use it in GitHub Desktop.
ssh to a server without typing your password

How to ssh to a remote server without typing your password

Save yourself a few keystrokes. Follow the steps below:

  1. Run this Bash script on your laptop:

    #!/usr/bin/env bash
    
    # The hostname of your remote server.
    host=myserver.com
    
    # Create this folder if it does not exist: ~/.ssh
    mkdir ~/.ssh
    
    # Set the correct permissions (required)
    chmod 700 ~/.ssh
    
    # Generate an RSA key pair for identification with the remote server
    ssh-keygen -t rsa
    
    # Copy your public key to the remote server
    cat ~/.ssh/id_rsa.pub | ssh $host 'cat >> ~/.ssh/authorized_keys'
    
    # ssh is very strict about correct permissions
    ssh $host 'chmod g-w,o-w ~; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys'

    At this point, you can connect to your server without typing a password:

    ssh username@myserver.com
  2. If you would prefer to type jupiter (7 characters) rather than username@myserver.com (21 characters), create a config file ~/.ssh/config on your laptop, as shown below. You'll be able to use the jupiter alias with: rsync, scp, and ssh.

    # ~/.ssh/config
    
    Host jupiter
        User carl
        HostName myserver.com
    

    At this point, you can connect to your server like this:

    ssh jupiter
  3. If you want a single command to do two steps:

    1. First, connect to a login server jupiter
    2. Next, connect to a work server saturn

    Then configure your ~/.ssh/config file as follows:

    # ~/.ssh/config
    
    Host jupiter
        User carl
        Hostname myserver.com
    
    Host saturn
        User carl
        ProxyCommand ssh -qX jupiter nc %h %p
    

    At this point, you can connect to saturn via jupiter like this:

    ssh saturn

Further reading

How to write your own config file:

All available configuration options:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment