SSH configuration: override the default username [closed]
Asked Answered
M

5

342

Is it possible to configure ssh to know what my username should be?

By default it uses the current username, which is not correct in my case.

I'm on a loaner laptop, and my username is loaner, but I want to tell ssh that my username is buck.

Bonus points: my username at home is bgolemon. If I could configure the username per-host that would be even better.

Madelenemadelin answered 17/4, 2012 at 19:10 Comment(4)
Stack Overflow is a site for programming and development questions. This question appears to be off-topic because it is not about programming or development. See What topics can I ask about here in the Help Center. Perhaps Super User or Unix & Linux Stack Exchange would be a better place to ask. Also see Where do I post questions about Dev Ops?Stroll
This is such a good question!Abstruse
accepted answer here is better quality than superuser ones: includes global (default) user directive use and comments added make directive priorities clearGilbart
More about ssh config priorities, default and host-specific users and such: therootcompany.com/blog/ssh-defaults-config-and-prioritiesMulligatawny
O
606

Create a file called config inside ~/.ssh. Inside the file you can add:

Host *
    User buck

Or add

Host example
    HostName example.net
    User buck

The second example will set a username and is hostname specific, while the first example sets a username only. And when you use the second one you don't need to use ssh example.net; ssh example will be enough.

Ophthalmia answered 17/4, 2012 at 19:19 Comment(4)
It's probably worth pointing out that according to man ssh_config: Since the first obtained value for each parameter is used, more host-specific declarations should be given near the beginning of the file, and general defaults at the end. So the Host * section should probably go at the end.Stenson
It is worth noting that config file will be processed in top-to-bottom fashion, populating each field (User, HostName...) and skipping repeated fields if multiple Host directives are matched. If you define Host *, User jdoe at the top, and then define Host example, HostName abc.example.com, User root, attempting ssh example will be the same as if you entered ssh [email protected]. In order to define ssh defaults (ie. User root), Host * directive needs to be at the bottom of config file.Corded
Also, don't forget chmod 600 on .ssh/configUnusual
Note that if there are multiple hostnames that the server is accessible by (or if you want the same default username for multiple servers), you should change the first line to Host server1.local example.net *.example.org and just get rid of the HostName line.Kristin
P
54

If you only want to ssh a few times, such as on a borrowed or shared computer, try:

ssh buck@hostname

or

ssh -l buck hostname
Permanganate answered 17/4, 2012 at 20:5 Comment(4)
Thanks, but I'm already familiar with this. It seems redundant to specify buck@host when it's always buck@host. I'm trying to find a method to represent this information in a configuration file.Madelenemadelin
Have you considered something as simple as alias sshhostname='ssh buck@hostname'?Permanganate
Yes, I have. Learath2's answer is exactly what I was looking for. I can check this into my dotfiles repository and not worry about it ever again.Madelenemadelin
I took the alias root because I connect to machines for different clients, where my username is different in each client environment. Another approach I suppose would be to have different local shell environments to set the ssh and related settings for each client. Or a VM per client.Decolorant
D
8

If you have multiple references to a particular variable i.e. User or IdentityFile, the first entry in the ssh config file always takes precedence, if you want something specific then put it in first, anything generic put it at the bottom.

Disaccharide answered 29/6, 2020 at 11:1 Comment(1)
This is exactly what I'm trying to figure out! Just move my Host * to the end of the file and everything works like I want.Grissel
S
6

man ssh_config says

User

Specifies the user to log in as. This can be useful when a different user name is used on different machines. This saves the trouble of having to remember to give the user name on the command line.

Supermundane answered 17/4, 2012 at 19:20 Comment(2)
"Identity" in this case is equivalent to the usual usage of "password". This is the data which authenticates you, but doesn't help specify who you are trying to authenticate as.Madelenemadelin
Oops. There's a user setting in there as well.Supermundane
T
0

There is a Ruby gem that interfaces your ssh configuration file which is called sshez.

All you have to do is sshez <alias> [email protected] -p <port-number>, and then you can connect using ssh <alias>. It is also useful since you can list your aliases using sshez list and can easily remove them using sshez remove alias.

Tetrastichous answered 5/1, 2016 at 1:9 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.