Вопрос или проблема
Существует необходимость включить имя хоста в имя пользователя, пытались использовать %h – но, по-видимому, это не поддерживается. Манипуляция с командой также не перечисляет никаких токенов, поддерживаемых в User
.
Конкретно для целевых хостов в some.domain имя пользователя должно стать user%host
.
Предпочтительно, чтобы это было динамическим, где просто ssh host
использовало бы имя хоста из команды.
Если User
поддерживал бы токен %h
, то строка конфигурации могла бы выглядеть так:
User user%%%h
Ответ или решение
Включение имени хоста в имя пользователя SSH
При использовании протокола SSH (Secure Shell) для подключения к удалённым серверам иногда возникает необходимость в динамическом формировании имени пользователя с добавлением имени хоста. В вашем случае вы хотите использовать формат user%host
, где user
— это стандартное имя пользователя, а host
— это имя целевого хоста, на который вы подключаетесь. Однако, как вы уже заметили, директива User
в конфигурационных файлах SSH не поддерживает токены для имён хостов, такие как %h
.
Проблема с использованием токена %h
На момент написания актуальной документации по SSH действительно не предусмотрено использование токена %h
в директиве User
. Данная ограниченность в конфигурации существенно усложняет жизнь администраторам, которым необходимо установление динамических имён пользователей при подключении к различным серверам.
Альтернативный подход
К счастью, есть несколько обходных путей, которые помогут вам добиться желаемого формата без прямого использования %h
:
-
Использование ssh_config: Хотя вы не сможете использовать токен
%h
вUser
, вы можете настроить конфигурационный файл SSH (~/.ssh/config
) для каждого хоста. Например:Host some.domain User user@some.domain
Но это не совсем то, что вам нужно. Это требует указания каждого хоста в конфигурации.
-
Использование скрипта: Вы можете создать оболочку или скрипт, который будет динамически формировать имя пользователя и вызывать команду SSH с соответствующими параметрами. Пример на bash:
#!/bin/bash HOSTNAME=$1 USERNAME="user%${HOSTNAME}" ssh "${USERNAME}"@"${HOSTNAME}"
С помощью этого скрипта вы можете запускать команду с названием хоста в качестве аргумента, например:
./ssh_connect.sh some.domain
-
Паттерн имен: Если у вас ограниченный список хостов, вы можете заранее прописать их в конфигурационном файле SSH с использованием пользовательских имен:
Host server1 User user%server1 Host server2 User user%server2
Это даст вам возможность использовать
ssh server1
илиssh server2
, но каждый новый хост всё ещё нужно будет добавлять вручную.
Заключение
Хотя SSH не предоставляет прямого способа внедрения имени хоста в имя пользователя через стандартный конфигурационный файл, вышеизложенные методы предлагают различные альтернативы для эффективного управления подключениями. Использование скриптов представляется наиболее удобным и динамичным решением, позволяющим адаптироваться к изменяющимся требованиям без необходимости ручного обновления файла конфигурации.
Помимо этого, рекомендуем следить за обновлениями документации и возможными расширениями функционала SSH, поскольку разработчики могут интегрировать новые возможности в будущих версиях программного обеспечения.