SSH配置:覆盖默认用户名

339

如何配置ssh知道我的用户名?

默认情况下,ssh使用当前的用户名,但这在我的情况下不正确。

我正在使用一台借来的笔记本电脑,我的用户名是loaner,但我想告诉ssh我的用户名是buck

加分项:我在家的用户名是bgolemon。如果我能针对每个主机配置用户名,那就更好了。


4
Stack Overflow是一个用于编程和开发问题的网站。这个问题似乎不符合主题,因为它与编程或开发无关。请查看帮助中心中的我可以在这里询问哪些主题。也许Super UserUnix&Linux Stack Exchange更适合提问。此外,请参阅我应该在哪里发布有关Dev Ops的问题? - jww
8
这是一个非常好的问题! - Nicolas S.Xu
这里接受的答案比Superuser上的更高质量:包括全局(默认)用户指令使用和添加的注释使指令优先级清晰明了。 - Rondo
更多关于ssh配置优先级、默认用户和特定主机用户等内容,请参阅:https://therootcompany.com/blog/ssh-defaults-config-and-priorities/ - coolaj86
6个回答

602

~/.ssh目录下创建名为config的文件。您可以在该文件中添加:

Host *
    User buck

或者添加

Host example
    HostName example.net
    User buck
第二个示例将设置一个特定于用户名和主机名的用户名,而第一个示例仅设置一个用户名。当您使用第二个示例时,您不需要使用 ssh example.netssh example就足够了。

170
根据man ssh_config的说法,值得指出的是:“对于每个参数来说,第一个获取到的值将被使用,因此更多针对特定主机的声明应该放在文件的开头,而通用默认设置应该放在结尾。” 因此,“Host *”部分应该放在最后。 - quodlibetor
15
值得注意的是,配置文件将按照从上到下的顺序进行处理,填充每个字段(用户、主机名...),如果匹配多个主机指令,则会跳过重复的字段。如果你在顶部定义了 Host *User jdoe,然后定义了 Host exampleHostName abc.example.comUser root,尝试 ssh example 将与输入 ssh jdoe@abc.example.com 相同。为了定义 SSH 默认值(即 User root),需要将 Host * 指令放在配置文件的底部。 - mr.b
19
别忘了对.ssh/config执行chmod 600操作。 - Sven
请注意,如果服务器可以通过多个主机名访问(或者您希望多个服务器使用相同的默认用户名),则应将第一行更改为“Host server1.local example.net *.example.org”,并删除“HostName”行。 - Lèse majesté

52

如果您只想ssh几次,例如在借用或共享计算机上,请尝试:

ssh buck@hostname

或者

ssh -l buck hostname

2
谢谢,但我已经熟悉了这个。在指定buck@host时它总是相同的,似乎有些多余。我正在尝试找到一种方法来在配置文件中表示这些信息。 - bukzor
2
你是否考虑过像alias sshhostname='ssh buck@hostname'这样简单的东西? - gpojd
是的,我有。Learath2的答案正是我在寻找的。我可以将其检入我的dotfiles存储库中,不再担心它了。 - bukzor
我使用别名root,因为我要连接不同客户的机器,在每个客户环境中我的用户名都不同。另一种方法可能是为每个客户设置不同的本地shell环境,以设置ssh和相关设置。或者为每个客户使用一个虚拟机。 - Nick Spacek

8
如果您有多个对特定变量(例如User或IdentityFile)的引用,ssh配置文件中的第一个条目始终具有优先权,如果您需要特定的内容,请将其放在第一位,将通用内容放在底部。

这正是我试图弄清楚的!只需将我的 Host * 移动到文件末尾,一切都可以按照我想要的方式工作。 - donatJ

6

man ssh_config说:

User

指定要登录的用户。当在不同的机器上使用不同的用户名时,这非常有用。这样可以避免在命令行上记住用户名所带来的麻烦。


1
在这种情况下,“身份”等同于“密码”的通常用法。这是验证您身份的数据,但并不能帮助指定您要作为谁进行验证。 - bukzor
糟糕,那里还有一个用户设置。 - nes1983

0
你可以使用一个快捷方式。在你的主目录下创建一个 .bashrc 文件。在里面,你可以添加以下内容:
alias sshb="ssh buck@host"

为了使别名在您的终端中可用,您可以关闭并重新打开终端,或者运行以下命令:

source ~/.bashrc

然后您只需输入以下内容即可连接:

sshb

1
这对于一个特定的主机非常好,但是当我不断连接到数万个不同的服务器时,这就变得无用了。最好设置.ssh/config并进行适当的设置。我来寻找“*”通配符(并学习它应该在底部)。 - mazunki
在大多数/好的情况下,有ssh自动补全(基于配置中声明的主机,在authorized_keys中,在known_hosts中),因此TAB有时只需要足够写一切。此外,shell通常会保留以前命令的历史记录,因此一旦输入,您就不必再次完整输入它。 - Patrick Mevzek

0

有一个名为sshez的Ruby gem可以与您的ssh配置文件进行交互。

您只需要运行sshez <alias> username@example.com -p <port-number>,然后就可以使用ssh <alias>连接。它还非常有用,因为您可以使用sshez list列出别名,并可以使用sshez remove alias轻松删除它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接