LINUX.ORG.RU
ФорумAdmin

Выдернуть username из ssh_config

 


0

1

Доброго!

cat ~/.ssh/config
someoptions
Host host1
User username1
someoptions
Port 22
someoptions
HostName 1.1.1.1
someoptions

someoptions
someoptions
someoptions
Host host2
User username2
someoptions
someoptions
Port 22
HostName 2.2.2.2

Host host3
User username3
someoptions
someoptions
someoptions
Port 33
HostName 3.3.3.3
someoptions
someoptions

onemorehost

onemorehost

Как бы мне оттуда User для определенного HostName выдернуть? У меня что-то какая-то громоздкая многоступенчатая порнография получается, да и та не получается. Может, гуру помогут? P.S. хочется чистого shell без перла, седа и авк.

Спасибо.



Последнее исправление: rusya_rr (всего исправлений: 1)

хочется чистого shell без перла, седа и авк.

lookforuser=0
while read line; do
   [ $line = "Host ..." ] && lookforuser=1
   if [ $lookforuser -eq 1 -a "$line" = "User..." ]; then
      echo "Found: $line"
   fi
done < file.txt

Код условный, работу с регекспами в условиях сам осиливай, богадельня там -->

anonymous
()
Ответ на: комментарий от anonymous

А всегда ли блок описания начинается с Host? Я вот думал, что нет.

И я слегка наврал в условии: Нужно User для определенного hostname, (не host) выдернуть.

Спасибо.

rusya_rr
() автор топика
Ответ на: комментарий от rusya_rr

А всегда ли блок описания начинается с Host? Я вот думал, что нет.

man ssh_config. К хосту, указанному в строке 'Host host1', относится только то, что идет до строки 'Host host2', и т. д.

Я бы попробовал csplit'ом разбить исходный config на временные файлы, потом grep'ом нашел бы, какой из них соответствует требуемому хосту, а вынуть нужную строку из файла — это самое простое.

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

Я бы попробовал csplit'ом разбить исходный config на временные файлы, потом grep'ом нашел бы, какой из них соответствует требуемому хосту, а вынуть нужную строку из файла — это самое простое.

это серьезно проще, чем написать простой однострочник на перле за 3 минуты, типа такого?

perl -n -e 'if (/^host\s+(\S+)/i) {print "HostName: $1 "}; if (/^user\s+(\S+)/i {print "User: $1\n"}' ~/.ssh/config

это было для всех пар хостнейм/юзер, если надо для конкретного, то тоже никаких проблем не вижу

George
()

что только люди не придумают, чтобы не пилить augeas

t184256 ★★★★★
()
Ответ на: комментарий от George
└► perl -n -e 'if (/^host\s+(\S+)/i) {print "HostName: $1 "}; if (/^user\s+(\S+)/i {print "User: $1\n"}' ~/.ssh/config
syntax error at -e line 1, near "/^user\s+(\S+)/i {"
syntax error at -e line 1, near ";}"
Execution of -e aborted due to compilation errors.
dexpl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.