Можно ли написать сценарий Bash, что
- будет запущен с машины A, войдет в систему на другой машине B с помощью ssh (обе машины A и B будут Linux-машинами),
- копирует некоторые файлы на компьютер B
- запускает скрипт Python для данного компьютера на данном компьютере.
- передает результаты обратно на машину A
- выходит из машины Б.
Это технически выполнимо?
bash
ssh
shell-script
Aufwind
источник
источник
cat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/results
ControlMaster=yes
иControlPath=/path/to/socketfile
, а затем запустить одно соединение ssh-f
для запуска фонового ssh. Скажите всем последующим соединениям SSH использовать один и тот же файл сокета.Я могу сделать все в одном
ssh
подключении / сеансе:Эта:
local_src
вremote_dst
,command
,remote_src
вlocal_dst
.Но если
command
пишет дальшеstdout
, результат также будет вlocal_dst
. Еслиcommand
читает входные данныеstdin
, он получит иEOF
.источник
Хотя вы можете сделать это внутри одного сеанса SSH, немного сложнее объединить копирование файлов с запущенными командами.
Самый простой способ решить эту задачу - запустить отдельные сеансы SSH для трех операций:
Это требует аутентификации на machineB три раза. Рекомендованный способ избежать многократной аутентификации - это использовать средство совместного использования соединений в современных версиях OpenSSH: запустить главное соединение с B раз и навсегда и автоматически подключить SSH к этому главному соединению. Добавьте
ControlMaster auto
иControlPath
строку к вашему~/.ssh/config
, затем запустите мастер-соединение в фоновом режиме, затем выполните свои задачи.Вместо того, чтобы использовать scp или rsync для копирования файлов, может быть проще смонтировать удаленную файловую систему под SSHFS . Между прочим, это позаботится о настройке мастер-соединения (при условии, что вы настроили
~/.ssh/config
как указано выше).источник