Задать вопрос

Логирование фоновых ssh сессий?

Задача: с линуксового сервера (centos 6) одновременно установить ssh соединения с несколькими системами — и писать в файлы (по одному на соединение) все, что прилетит от тех систем, ничего не отправляя. При разрыве соединения переподключаться. На той стороне импортирован открытый ключ, т.е. ручная аутентификация не требуется. Адреса тех, к кому подключаться, можно парсить из текстового файла. Создавать по отдельному скрипту на соединение — не дело.
Очевидное решение: внутри for-цикла вызывать нечто вроде «ssh user@$IP >> log-$IP.txt &». Не работает, вывод запущенного в фоне SSH не улетает в stdout, хотя без амперсента все отлично. "| tee file.txt &" тоже не работает в фоне. Как и любые другие основанные на стандартном клиенте ssh и на stdout решения, которые я сумел нагуглить за несколько часов. Ничего не помогает.

Собственно, вопрос. Каким образом добиться того, чтобы запущенный в фоне ssh клиент (любой, можно не только родной) мог держать соединение с той стороной бесконечно долго (пока та сторона его не отобьет) и при этом логгировать все услышанное в файл?
  • Вопрос задан
  • 4589 просмотров
Подписаться 10 Оценить Комментировать
Решения вопроса 1
@JDima Автор вопроса
Победил.
Запуск в фоне sh, bash и прочих скриптов не работает. За исключением expect. Вызов вот этого скрипта с пайпом и амперсентом корректно пишет увиденное в файл:

#!/usr/bin/expect -f
set timeout -1
set user [lrange $argv 0 0]    
set ipaddr [lrange $argv 1 1]

while { true } {
spawn ssh $user@$ipaddr   
expect "impossiblesequence"
sleep 10
}


Всем спасибо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
BuriK666
@BuriK666
Компьютерный псих
sh -c 'ssh user@example.org command' & > /path/to/output
Ответ написан
@EaS
А если запуск ssh и редирект в файл поместить в .sh файл, и из цикла запускать его?
Ответ написан
AterCattus
@AterCattus
Люблю быстрый backend
А так?
screen -Dms <screen_session_name> sh -c 'ssh user@example.org "do-smth" > /path/to/output'
Ответ написан
@bondbig
Подключение идет к портам терминального сервера, к которому подключены консоли (COM порты) разнообразных железок. Эти железки периодически шлют сообщения в консоль. Надо эти сообщения записывать.
А не лучше тогда в таком случае при помощи syslogng слать все это на удаленный syslog-сервер?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы