How to save a frequently used SSH host for access via terminal? [duplicate]
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.
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:
-
define
~/.ssh/config
file with the following contentsHost meh HostName meh.example.com User admin Port 1234 IdentityFile ~/.ssh/id_rsa
use
ssh meh
to connect to the host using the config file.
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
.
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!
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 [email protected]
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.
I usually just create a .sh
which contains a ssh command. For example:
# file name: mywebsite-live.sh
ssh [email protected] # 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.