Расширение переменной в ssh_config

У меня есть несколько устройств с удаленным управлением согласно этому описанию , так что для подключения с моего сервера я набираю:

ssh localhost -p 2870

Поскольку у меня есть связка хостов, которыми я управляю, я хотел сократить это, чтобы я мог просто набрать:

ssh 2870

Я не хочу использовать псевдонимы bash (с тех пор я не мог также использовать SCP и Ansible), поэтому попробовал это в ~ / .ssh / config :

Host 28??
       HostName localhost
       Port %h

Это не удается, поскольку по какой-либо причине% h не расширяется в строке порта (это будет в HostName и других). Поэтому попробовал это вместо этого:

Host 28??
       ProxyCommand ssh -v localhost -p %h

Здесь% h расширяется ОК, и я вижу, что он входит в сервер ОК (через открытый ключ), но я не получаю приглашения.

Есть идеи, как я могу сделать это «псевдоним» в конфигурации ssh?

0
15.09.2016, 09:21
1 ответ

Похоже, что расширение% h просто не работает в директиве Port. Если вы не против заполнить .ssh / config большим количеством записей, нетрудно сгенерировать их динамически (особенно если у вас есть список или они последовательные):

$(for port in `seq 2000 2900`
 do
   echo Host $port
   echo "  Hostname localhost"
   echo "  Port ${port}"
   echo ""
 done) >> ~/.ssh/config

Поскольку мы можем посмотреть исходный код код для ssh, можно подтвердить, что расширение не выполняется для порта:

readconf.c: https://github.com/openssh/openssh-portable/blob/dc664d1bd0fc91b24406a3e9575b81c285b8342b/readconf.c

Вызывает функцию percent_expand для параметров хоста и exec - это, по-видимому, функция, которая преобразует% h в имя хоста. Эта же функция вызывается из ssh.c. Интересно, что ProxyCommand откладывает расширение этих переменных на потом. Это не требуется для директивы Port.

https://github.com/openssh/openssh-portable/blob/ed877ef653847d056bb433975d731b7a1132a979/misc.c

2
28.01.2020, 02:34

Теги

Похожие вопросы