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-совместимый положительный взгляд на регулярное выражение

Другие вопросы по тегам