Bash извлекает пользователя для конкретного хоста из конфигурационного файла ssh
Я пишу сценарий bash, где мне нужно получить конкретного пользователя из конфигурационного файла ssh. Конфигурационный файл ssh выглядит примерно так:
HOST blag
HostName blag.net.au
Port 2683
User blaguser
Host bloo
User ABCDEF
IdentityFile ~/.ssh/id_rsa
HOST biff
HostName biff.net.au
Port 2683
User biffuser
Я хочу получить строку 'ABCDEF' и поместить ее в переменную, выполнив поиск Host bloo.
Я смог использовать ответ по адресу https://superuser.com/questions/791374/get-variable-values-from-config-file/791387, чтобы прочитать файл конфигурации, но он назначил массив с последняя запись хоста в файле.
Я могу удалить запись хоста с этим ответом Как я могу удалить запись хоста из файла конфигурации ssh?, Команда sed здесь может быть отредактирована для извлечения правильного User
но я не уверен, как именно
У меня много проблем с этим. Кто-нибудь может помочь? Ответ, который использует sed, будет предпочтительнее.
2 ответа
В соответствии с комментарием 123 выше:
var=$(awk '/^Host bloo$/{x=1}x&&/User/{print $2;exit}' ssh.conf)
Это будет назначать значение ABCDEF
к вар.
Ты можешь использовать ssh
Режим тестирования конфигурации, чтобы проанализировать файл конфигурации и вернуть вам ожидаемое значение:
ssh -G hostname | grep "user "
Это должно работать, так как openssh-6.8
,
Добавление к правильному ответу @Jakuje. Это вернет только имя пользователя
$ ssh -G hostname | grep -m1 -oP "(?<=user ).*"
ubuntu
где параметры grep означают
-m1
- перестать читать после первых матчей
-o
- распечатать только совпадающую часть строки
-P
- использовать Perl-совместимый положительный взгляд на регулярное выражение