12

我有一个像下面这样的 SSH 配置,它适用于:

ssh b21
ssh 23
ssh s267

示例 .ssh/config(传递的主机名插入到 %h):

host s*
    HostName atrcu%h.example.com
    User example
    Port 22
host b*
    HostName atrcx%h.example.com
    User example
    Port 22
host ??*
    HostName atvts%h.example.com
    User example
    Port 2205

但我想在主机中包含用户名:

ssh b21ex

这将 ssh 到:

example@atvts21.example.com

但相反会:

atvts21ex.example.com

他们是否有任何方法可以在传递 %h 时对其进行剪切/修改,并且可能让连接匹配更多模式以获取用户名?

4

2 回答 2

3

您可以使用match规范而不是host. 这是指定主机或一组主机的另一种方式。

例如:

Match user u* host t*
  Hostname %hest.dev
  User %r

这将匹配用户模式和目标主机模式。

然后命令行将类似于ssh u@t,导致此替换:u@test.dev

这是 ssh 调试输出的一个片段:

debug2: checking match for 'user u* host t*' host t originally t
debug3: /Users/_/.ssh/config line 2: matched 'user "u"' 
debug3: /Users/_/.ssh/config line 2: matched 'host "t"' 
debug2: match found
...
debug1: Connecting to test.dev port 22.
debug1: Connection established.
...
u@test.dev's password:

match可以匹配其他一些东西(并且有一个执行 shell 命令的选项),但除此之外它就像host. 进入那里的 ssh 客户端选项是相同的(例如,您可以指定并将IdentityFile与匹配的规范一起使用)

您可以在手册页中阅读更多内容: ssh_config

于 2019-10-19T15:32:18.693 回答
0

我认为您必须HostName/User为每个可能的缩写匹配创建单独的条目。然后,您可以使用它%r来访问每个用户的单独身份文件。user@host这将允许您以创建更复杂的配置文件为代价跳过使用登录。

您可能会更幸运地编写一个脚本或 shell 别名来取消您的缩写并将它们交给ssh准备就绪。

于 2013-07-16T15:51:51.613 回答