Назад | Перейти на главную страницу

Как настроить конфигурацию SSH для захвата части имени хоста ssh и использования в качестве переменной?

Я использую 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"