有没有办法在指定“主机名”时使用先前指定的 ssh-config 条目?
Is there a way to use a previously specified ssh-config entry in specifying `Hostname`?
编辑: 我见过这种方法有效的情况和这种方法无效的情况,我不确定我是否遵循 when/why 它确实如此。
假设我有一个足够复杂的条目,我在其中指定了多个参数以到达 thathost
:
Host thathost
ControlMaster auto
ServerAliveInterval 8
ConnectTimeout 8
Hostname 192.168.5.1
User mememe
ProxyJump thejumpbox
我想 re-use 通过添加或覆盖某些配置来创建提供不同功能的附加条目中的此定义。专门指定备用端口(不,我不想在 command-line 上使用它)。
理想情况下,我可以做类似
的事情
Host theirhost
Hostname thathost
User themthem
或
Host my-remote-serialport
Hostname thathost
RequestTTY yes
RemoteCommand some-script-that-launches-kermit-on-a-specific-dev-tty
或
Host my-remote-serialport
Hostname thathost
Port 3004
我严格按照另一台现有主机来指定一台主机,我不想修改我的 Host
条目以匹配某些模式“技巧”。
显然我可以利用 ProxyCommand ssh -q nc thathost...
或 ProxyJump thathost
+Hostname localhost
然后是所有其他覆盖(端口覆盖会把它传递给 nc
),但仅此而已丑陋和浪费(一个额外的session)-请不要用那个回答。
对我来说,这是 ssh-config
缺少的功能,但也许我看得不够仔细。
不能按照你要求的方式使用,比如重用一个hostname
定义,但是ssh提供的解决方案可以解决更多的问题。
一个主机规则可以跨越多个主机。
Host thathost theirhost my-remote-serialport
ControlMaster auto
ServerAliveInterval 8
ConnectTimeout 8
Hostname 192.168.5.1
User mememe
ProxyJump thejumpbox
但显然这并不能解决您修改某些属性的问题。
诀窍是,ssh 配置对属性使用 first wins 策略。
在你的情况下,你只需要在主配置
前面添加修改
Host theirhost
Hostname thathost
User themthem
Host my-remote-serialport
Hostname thathost
Port 3004
Host thathost theirhost my-remote-serialport
ControlMaster auto
ServerAliveInterval 8
ConnectTimeout 8
Hostname 192.168.5.1
User mememe
ProxyJump thejumpbox
theirhost
在两个地方定义,属性 Hostname
和 User
取自第一个定义,所有其他属性取自第二个定义。
host
部分也接受通配符,例如具有多个反向 ssh 端点的 jumpbox:
HOST my_1
port 2001
HOST my_2
port 2002
HOST my_3
port 2003
HOST my_*
user pi
hostname localhost
ProxyJump thejumpbox
无法引用不同的块;但是,您可以包含具有 global 配置的特定配置文件。例如,创建一个供 thathost
、theirhost
和 my-remote-serialport
使用的文件。我们就叫它 foo-config
.
ControlMaster auto
ServerAliveInterval 8
ConnectTimeout 8
Hostname 192.168.5.1
User mememe
ProxyJump thejumpbox
然后你可以使用Include
指令根据需要读入:
Host theirhost
Include foo-config
User themthem
Host my-remote-serialport
Include foo-config
RequestTTY yes
RemoteCommand some-script-that-launches-kermit-on-a-specific-dev-tty
Host my-remote-serialport
Include foo-config
Port 3004
但是,我怀疑很少需要这种方法,在大多数情况下 方法可能就足够了。
编辑: 我见过这种方法有效的情况和这种方法无效的情况,我不确定我是否遵循 when/why 它确实如此。
假设我有一个足够复杂的条目,我在其中指定了多个参数以到达 thathost
:
Host thathost
ControlMaster auto
ServerAliveInterval 8
ConnectTimeout 8
Hostname 192.168.5.1
User mememe
ProxyJump thejumpbox
我想 re-use 通过添加或覆盖某些配置来创建提供不同功能的附加条目中的此定义。专门指定备用端口(不,我不想在 command-line 上使用它)。
理想情况下,我可以做类似
的事情Host theirhost
Hostname thathost
User themthem
或
Host my-remote-serialport
Hostname thathost
RequestTTY yes
RemoteCommand some-script-that-launches-kermit-on-a-specific-dev-tty
或
Host my-remote-serialport
Hostname thathost
Port 3004
我严格按照另一台现有主机来指定一台主机,我不想修改我的 Host
条目以匹配某些模式“技巧”。
显然我可以利用 ProxyCommand ssh -q nc thathost...
或 ProxyJump thathost
+Hostname localhost
然后是所有其他覆盖(端口覆盖会把它传递给 nc
),但仅此而已丑陋和浪费(一个额外的session)-请不要用那个回答。
对我来说,这是 ssh-config
缺少的功能,但也许我看得不够仔细。
不能按照你要求的方式使用,比如重用一个hostname
定义,但是ssh提供的解决方案可以解决更多的问题。
一个主机规则可以跨越多个主机。
Host thathost theirhost my-remote-serialport
ControlMaster auto
ServerAliveInterval 8
ConnectTimeout 8
Hostname 192.168.5.1
User mememe
ProxyJump thejumpbox
但显然这并不能解决您修改某些属性的问题。
诀窍是,ssh 配置对属性使用 first wins 策略。
在你的情况下,你只需要在主配置
前面添加修改Host theirhost
Hostname thathost
User themthem
Host my-remote-serialport
Hostname thathost
Port 3004
Host thathost theirhost my-remote-serialport
ControlMaster auto
ServerAliveInterval 8
ConnectTimeout 8
Hostname 192.168.5.1
User mememe
ProxyJump thejumpbox
theirhost
在两个地方定义,属性 Hostname
和 User
取自第一个定义,所有其他属性取自第二个定义。
host
部分也接受通配符,例如具有多个反向 ssh 端点的 jumpbox:
HOST my_1
port 2001
HOST my_2
port 2002
HOST my_3
port 2003
HOST my_*
user pi
hostname localhost
ProxyJump thejumpbox
无法引用不同的块;但是,您可以包含具有 global 配置的特定配置文件。例如,创建一个供 thathost
、theirhost
和 my-remote-serialport
使用的文件。我们就叫它 foo-config
.
ControlMaster auto
ServerAliveInterval 8
ConnectTimeout 8
Hostname 192.168.5.1
User mememe
ProxyJump thejumpbox
然后你可以使用Include
指令根据需要读入:
Host theirhost
Include foo-config
User themthem
Host my-remote-serialport
Include foo-config
RequestTTY yes
RemoteCommand some-script-that-launches-kermit-on-a-specific-dev-tty
Host my-remote-serialport
Include foo-config
Port 3004
但是,我怀疑很少需要这种方法,在大多数情况下