Я использую SSH в нескольких центрах обработки данных, которые настроены одинаково. Каждый центр обработки данных имеет Jumpbox, а за ним есть доступ к различным серверам баз данных и т. Д.
Трудно вручную указать записи для всех этих серверов, когда они почти идентичны в центрах обработки данных, кроме IP-адреса jumpbox. Поэтому я хотел бы настроить мой файл .ssh / config
так, чтобы я мог ввести datacenter_name-server_behind_jumpbox
и заставить SSH захватить datacenter_name
с передней стороны хост (чтобы я мог повторно использовать его в ProxyCommand
.
Например, если я хочу получить доступ к серверу Maria в центре данных1, я бы создал SSH-запись для jumpbox с именем ] datacenter1
. Затем для сервера Maria, стоящего за ним, я бы установил что-то вроде:
Host %dc%-maria
Hostname maria
User jeff
ProxyCommand ssh -q -W %h:%p %dc
Таким образом, мне нужно только настроить одну запись для каждого типа сервера, расположенного за 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"