Как написать цикл чтение из файла данные, разбивка данных на переменные и выполнить коннект?

Есть файл с содержание
37.33.61.72;root;123456
46.55.118.33;root;root
62.21.72.67;root;12345
87.25.74.122;root;root
89.28.30.43;root;root

Вот нужно считать это из файл и вывести в одной строке в виде $host $login $pass
потом эти данные вставить в строку такого формате
sshpass -p $pass ssh $login@$host
и если все отлично выводить Ok, а если данные не верные то выводить bad
у меня че то не получается считать из строки и разбить по переменным данные.
  • Вопрос задан
  • 3137 просмотров
Пригласить эксперта
Ответы на вопрос 2
merryjane
@merryjane
Системный администратор
Вот например, как можно из каждой строки списка получить нужную команду:
#!/bin/bash
while read -r LINE;
do
	awk -F';' '{print "sshpass -p "$3" ssh " $2"@"$1}'
done < ${1}


Сам скрипт запускается так:
./script.sh list.txt
На выходе получится:
sshpass -p 12345 ssh root@62.21.72.67
sshpass -p root ssh root@87.25.74.122
sshpass -p root ssh root@89.28.30.43


Дальше уже выполнять полученную команду и парсить какой-либо признак, чтобы определить прошло подключение или нет и выдавать в завимости от этого OK или BAD.
Ответ написан
xotkot
@xotkot
хорошо есть и хорошо весьма
если я правильно понял то это будет выглядеть примерно так:
eval "$(cat x.log|awk -F';' '{print "sshpass -p \""$3"\" ssh "$2"@"$1}')"

где x.log твой файл с которого считываются данные

> "и если все отлично выводить Ok"
куда выводить ?) при успехе вы залогинитесь на удалённую машину и перед вами будет другая консоль.
> "и выдавать в завимости от этого OK или BAD"
при провале вам выдаст что-то типа этого:
ssh: connect to host 192.168.1.1 port 22: Connection refused

согласитесь это немного более информативно чем просто BAD, по крайней мере понятно какой адрес сфейлился, да и правильнее наверное вывод ошибок скидывать в лог файл чтобы потом можно было проанализировать если что
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы