32

I have a host that I frequently ssh into. But I don't want to enter it again and again. Should I use an environment variable for this or is there a better way?

I wouldn't mind a generalized solution on saving frequently used variables that exist outside of a single bash session.

Vaish MK
  • 423

5 Answers5

52

Environment variables are for the purpose of communicating information to multiple commands/processes that you start in shell that commands or processes expect to be there in the environment. Usually such variables include options, such as LESS variable passing frequently-used options to less pager, PERL5LIB for finding perl modules in non-standard locations, LC_LANG to communicate which language a command should use for the output.

If the URL is for your own use with a specific command, use an alias such as alias au='firefox https://askubuntu.com or a function such as open_url(){ firefox "$@" } to open arbitrary URL that you provide on command-line as positional parameter to the function.

In certain cases such as ssh, you can define connection properties in configuration files as explained in Lekensteyn's answer:

  1. define ~/.ssh/config file with the following contents

    Host meh
        HostName meh.example.com
        User admin
        Port 1234
        IdentityFile ~/.ssh/id_rsa
    
  2. use ssh meh to connect to the host using the config file.

15

Also I would suggest to create an alias.

Edit your .bashrc (or maybe .profile or similar file) in your home directory. Add several aliases like:

alias go='ssh url1'
alias go2='ssh url2'

Then, relogin/reconnect and enter go or go2.

dessert
  • 40,956
Lewis B
  • 159
7

I'd suggest combining Sergiy's and Lewis's answers for maximum laziness efficiency:

First create a host entry for ssh:

define ~/.ssh/config file with the following contents

    Host meh
        HostName meh.example.com
        User admin
        Port 1234
        IdentityFile ~/.ssh/id_rsa

Now ssh meh works, but that could still be quite long. There is auto-completion (after ssh[Blank]), but it's still an awful lot to type.

So let's also define an alias:

Edit your .bashrc in your local home directory. Add an alias like:

alias meh='ssh meh'

Now you can connect to "meh.example.com" by simply typing meh in your terminal window. If instead of "meh" you want to use a longer string, you can actually use [Tab] key to autocomplete.

Or if you are really lazy, just define a single character as an alias:

alias m='ssh meh'

So, if you type m and hit Enter/Return, your ssh connection will start immediately!

Robert Riedl
  • 4,401
5

Yet another option is to use the history features of the shell. You can Ctrl-r in bash and type a unique substring of the last time you ssh'ed to that place. If there's no unique substring, you can just use whatever qualifies best as a rare substring and browse through the history entries by repeatedly pressing Ctr-r until you get to it. For example, you might type Ctrl-r and "monkeys" or "codemonkeys" or "odemon" or "kong" and get

ssh kong@codemonkeys.some-server.com

from the last, and hopefully only time you typed that whole.

With the history features of the shell, there's really no reason to type any long command more than once.

JoL
  • 1,458
4

I usually just create a .sh which contains a ssh command. For example:

# file name: mywebsite-live.sh
ssh username@123.123.123.123 # or whatever the domain is.

And then to run it I simply do ./mywebsite-live.sh

I realise that it's probably a pretty crappy solution but it works for me and the hope is that it might work for someone else too.

SeriousLee
  • 149
  • 1