仅使用SSH Config Hostname中的部分模式

时间:2013-06-18 12:48:45

标签: unix ssh openssh

我有一个类似下面的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 to:

example@atvts21.example.com

但反而会:

atvts21ex.example.com

是他们通过什么方式来剪切/修改%h,也许连接匹配更多模式以获得用户名?

2 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:0)

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

你可能会更好地写一个脚本或shell别名来解开你的缩写并将它们交给ssh准备好了。