Ssh

如何配置 ~/.ssh/config 以使 ssh foo.bar 連接到 foo.internal.bar

  • May 5, 2020

我有一個具有公共(例如 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_confighttps://man.openbsd.org/ssh_config並且找不到答案,如果甚至存在的話。我正在使用 macOS 10.15.4:

$ ssh -V
OpenSSH_8.1p1, LibreSSL 2.7.3

我想出了一個工作方法。這有點難看,但它確實有效。這利用了ProxyCommand指令(參見手冊頁)與一個小的 bash 幫助腳本相結合。

  1. 將這樣的部分添加到**~/.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
  1. 將它保存在你的$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

引用自:https://unix.stackexchange.com/questions/580979