Я использую SSH в нескольких центрах обработки данных, которые настроены одинаково. Каждый центр обработки данных имеет Jumpbox, а за ним есть доступ к различным серверам db и т. Д.
Трудно вручную указать записи для всех этих серверов, когда они почти идентичны в центрах обработки данных, за исключением IP-адреса jumpbox. Итак, я бы хотел установить свой .ssh/config
файл, чтобы я мог ввести datacenter_name-server_behind_jumpbox
и SSH захватит datacenter_name
с передней стороны хоста (чтобы я мог повторно использовать его в ProxyCommand
.
Например, если я хочу получить доступ к серверу Maria в центре данных1, я бы создал запись SSH для прыжкового поля с именем datacenter1
. Затем для сервера Maria, стоящего за ним, я бы установил что-то вроде:
Host %dc%-maria
Hostname maria
User jeff
ProxyCommand ssh -q -W %h:%p %dc
Таким образом, мне нужно настроить только одну запись для каждого типа сервера, расположенного за Jumpbox, и он автоматически знает, в какой из JumpBox нужно попасть.
Возможно ли что-то подобное?
Я добавляю фальшивый суффикс к имени хоста с разными прокси-хостами
Host *.dc1
ProxyCommand ssh -q %r@dc1 -W %h:%p
Host *.dc2
ProxyCommand ssh -q %r@dc2 -W %h:%p
Затем сделайте что-нибудь вроде ssh server1.dc1, и он будет использовать прокси-сервер.
Вы можете добавить записи Host для пользовательских настроек, например:
Host server1.*
User jeff
Вы можете запустить сценарий как настраиваемую команду ProxyCommand и выполнить свою работу до настоящий ProxyCommand:
.ssh/config
:
Host *-maria
Hostname maria
User jeff
ProxyCommand /bin/datacenter_ssh.sh %h %p
datacenter_ssh.sh
:
#!/bin/bash
COMBINED=$1
DATACENTER=$(echo $COMBINED | cut -d'-' -f1)
SERVER=$(echo $COMBINED | cut -d'-' -f2)
PORT=$2
ssh -q -W $SERVER:$PORT $DATACENTER
Я в похожей ситуации и делаю что-то вроде этого:
# configuration for the datacenter, can add entries for each datacenter
Host datacenter_name
HostName <datacenter_ip>
User <datacenter_user>
IdentityFile <datacenter_keyfile>
# usage match: datacenter_name-server_behind_jumpbox
Host *-*
User <server_behind_jumpbox user>
IdentityFile <server_behind_jumpbox keyfile>
Port <server_behind_jumpbox port>
ProxyCommand ssh $(echo %h | cut -d- -f1) nc $(echo %h | cut -d- -f2) %p"
Конечно, вы могли бы сделать что-то более похожее на то, что описали
# usage match: datacenter_name-maria, specify one for each server
Host *-maria
User <maria user>
IdentityFile <maria keyfile>
Port <maria port>
ProxyCommand ssh $(echo %h | cut -d- -f1) nc $(echo %h | cut -d- -f2) %p"