Привет, коллеги!
Пробую разобраться с тем, как два процесса взаимодействуют через SSH поток в процессе прохождения курса “от 0 до Linux админа”. Использую rsync
через SSH для резервного копирования с помощью команды:
rsync -avz user@address:/home/user ./backup
Я понимаю, что rsync
создает SSH сессию и на другой стороне выполняется rsync --server ...
, который ждет команды протокола. Но как именно происходит это взаимодействие? Как процессы могут общаться между собой по SSH?
Чтобы разобраться, я создал простой Python-скрипт, который читает данные из stdin
и, если находит команду “test”, выводит строку. Код выглядит так:
import sys
for line in sys.stdin:
if line[:-1] == "exit":
exit(0)
elif line[:-1] == "test":
print("test received")
Выполняя команду 'ssh user@address "pythonscript.py"'
, я увидел, что скрипт не выводит данные, так как не может читать из соединения SSH. Возможно, стоит читать данные из другого источника?
Я также попробовал использовать ssh -t
, который создает псевдотерминал, и с его помощью смог отправлять команды и данные в скрипт.
Еще один способ, о котором я подумал, это SSH туннель (переадресация порта), чтобы программам можно было общаться через сетевые сокеты.
Все же, я до конца не понял, как rsync
удается обмениваться данными с серверной частью через SSH. Возможна ли тут передача через пайпы или что-то еще? strace
выдал слишком большой объем данных о действиях rsync
и ssh
.
Буду благодарен за любые советы, идеи или подсказки. Спасибо!