передача данных в сети

0

Пожалуйста, предложите некоторые решения. Обычно я ssh на другой компьютер и выполняю некоторые вычисления там, тогда я просто sftp, когда мне нужно перенести данные с этого компьютера на локальную хост-машину. На этот раз я хочу отправить некоторые данные с моего локального компьютера на удаленный компьютер, удаленный компьютер сделает свой бит, а затем отправит обратно его вывод. Как я могу автоматизировать этот процесс, чтобы он повторялся столько раз, сколько я указываю на своей локальной машине? Это довольно сложно сделать. Пожалуйста, дайте мне знать, если я не дал достаточно подробностей.

Это ручной процесс.

ssh [email protected] !ssh to remote machine
program.o input.dat         !supply input to the program
sftp [email protected] !ftp to remote machine from another terminal
get output.dat              !output.dat was produced by program.o
!open an other terminal
another_prog.o output.dat   !run another program on my local machine
!Then repeat. Some times I may compile using a make file.

Я хочу автоматизировать этот процесс. какие у меня варианты. Программы написаны на любом количестве языков, таких как C++/c, fortran. Я нормальный программист, но у меня никогда не было ситуации, когда мне приходилось делать это, поэтому научи меня :)

Как мои локальные, так и удаленные машины - linux/ubuntu

Теги:
scripting
ssh
network-programming

2 ответа

1
  1. Настройте логин/ключ открытого ключа между системами, которые вы хотите автоматизировать. См. Например, здесь для объяснения того, как это сделать: https://wiki.archlinux.org/index.php/SSH_Keys - обратите внимание, что вам будет очень полезно использовать ssh-агенты (и, например, связывание ключей, если это применимо)
  2. ssh можно использовать для удаленного выполнения чего-либо, передавая все, что вы пишете, на свой stdin на удаленный процесс 'stdin.

Примеры:

echo test | ssh yourmachine.example.com xargs echo

Это вызовет удаленную программу xargs, которая будет считывать "тестовую" строку из stdin, переданную ей через ssh, которую вы передали ей в первой управляемой эхо-команде, и она (xargs) выполнит двоичный файл удаленного echo с помощью строки "test" в качестве аргумента, возвращая то, что удаленная команда "echo" записывает в свой stdout, в вашу собственную ssh-команду stdout, которая является вашим терминалом. Короче говоря, это сложный способ вызова echo на удаленном компьютере для эхо-строки произвольной строки и возврата ее вам.

echo more tests | ssh yourmachine.example.com "cat > /tmp/file.txt"

Это создаст файл /tmp/file.txt на удаленном компьютере с содержимым "больше тестов" (поскольку удаленно выполненная команда cat будет читать строку "больше тестов" из своего stdin, а перенаправление оболочки будет записывать свой вывод в /tmp/file.txt - обратите внимание, что кавычки необходимы, потому что вы хотите передать строку "cat>/tmp/file.txt" в целом, интегральную команду для удаленной системы).

cat input_data.txt | ssh yourmachine.example.com /usr/bin/my_number_cruncher > output_data.txt

Это передаст содержимое файла input_data.txt на удаленный компьютер, выполнит input_data.txt файл /usr/bin/my_number_cruncher и передаст его на свой stdin и вернет все, что эта программа записывает в stdout в файл output_data.txt на вашей локальной машине,

Используя все эти комбинации, вы можете видеть тривиальным передачу файлов и данных между машинами с помощью ssh, вызывать удаленные программы и передавать результаты обратно вам.

0

вы можете использовать команду scp для копирования файла с удаленного на локальный или с локального на удаленный. для автоматизации вы можете написать сценарий для того же самого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню