`ssh foo.bar`が`foo.internal.bar`に接続するように〜/.ssh/configをどのように設定しますか?

`ssh foo.bar`が`foo.internal.bar`に接続するように〜/.ssh/configをどのように設定しますか?

公開されたシステムがあります(例:server1。foo.bar)個人的に解析できます(例:server1)。内部.foo.bar)DNS名。 SSH接続はプライベートIPを介してのみ可能ですが、私は常に公開名に基づいてこれらのホストを検討しています。

私の考えでは:

  • *.internal.barパターンの使用を覚えているかどうかに関係なく、正しいIPに接続します。
  • キー入力を保存

わかりました代替タグこれは%h、コマンドラインで指定されたホスト名を変更するために使用できます。

Host foo
    Hostname %h.some.other.domain

私が探している行動は次のとおりです。

Host *.foo.bar
    Hostname %m.internal.foo.bar

ここでは、%m指定されたホスト名で部分のみを置き換えます。最初のポイントまで。私もman 5 ssh_config読んだhttps://man.openbsd.org/ssh_configそして答えが見つかりません(存在する場合)。私はmacOS 10.15.4を使用しています:

$ ssh -V
OpenSSH_8.1p1, LibreSSL 2.7.3

ベストアンサー1

私は働く方法を見つけました。少し醜いが動作します。これはProxyCommandディレクティブを使用します(参照:マンページ)小さなbashヘルパースクリプトと組み合わせた。

  1. 次のセクションを追加してください。~/.ssh/config— 再マップするドメインごとに 1 つずつ:
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

おすすめ記事