Ssh如何配置 ~/.ssh/config 以使
如何配置 ~/.ssh/config 以使 ssh foo.bar
連接到 foo.internal.bar
?
我有一個具有公共(例如 server1. foo.bar)和私有可解析(例如 server1. internal.foo.bar)DNS 名稱的系統。SSH 連接只能通過私有 IP 進行,但我總是根據它們的公共名稱來考慮這些主機。
我想:
- 無論我是否記得使用該
*.internal.bar
模式,都連接到正確的 IP- 保存擊鍵
我知道諸如可用於修改命令行中給出的主機名的替換標記,例如
%h
Host foo Hostname %h.some.other.domain
我正在尋找的行為類似於:
Host *.foo.bar Hostname %m.internal.foo.bar
Where
%m
僅被給定主機名的部分替換,直到第一個點。我已經閱讀man 5 ssh_config
了https://man.openbsd.org/ssh_config並且找不到答案,如果甚至存在的話。我正在使用 macOS 10.15.4:$ ssh -V OpenSSH_8.1p1, LibreSSL 2.7.3
我想出了一個工作方法。這有點難看,但它確實有效。這利用了
ProxyCommand
指令(參見手冊頁)與一個小的 bash 幫助腳本相結合。
- 將這樣的部分添加到**~/.ssh/config** - 一個用於您要重新映射的每個域:
Match final host="!*.corp.foo.com,*.foo.com" ProxyCommand ssh_ext2int %h %p Match final host="*.quux.biz" ProxyCommand ssh_ext2int %h %p
- 將它保存在你的
$PATH
某個地方作為ssh_ext2int -chmod u+x
它:#!/usr/bin/env bash [ $# -eq 2 ] || exit 1 typeset -A dmap dmap=( [foo.com]=corp.foo.com [quux.biz]=internal.qux.lan ) d=${1#*.} h=${1%%.*} nd=${dmap[$d]:-$d} /usr/bin/nc -w 120 $h.$nd $2 2>/dev/null
現在,
ssh server158247.quux.biz
應該將您連接到server158247.internal.qux.lan