Как скопировать, выполните и получите данные из удаленного компьютера?

Можно сделать это легко путем ссылки /dev/input/by-id/usb-manufacturername_*serialnumber*. Они появляются как символьные ссылки, которые можно разыменовать использование readlink -e определить связанное блочное устройство. Эти ссылки однако создаются udev который не мог бы присутствовать в Вашей встроенной среде.

Или.. Посмотрите на dmesg после подключения USB-устройства. Это должно дать Вам /dev узел.

3
30.09.2014, 17:27
3 ответа

Я не совсем уверен, в чем ваш вопрос, но у меня есть два замечания, которые слишком длинные для комментария:

  1. Ваш текущий сценарий остановится, как только вы войдете на хост (в строке 4) и будет ждать, пока вы что-то сделаете интерактивно - скрипт продолжится только после выхода (что, вероятно, не то, что вам нужно).

    Следовательно, поместите все, что должно быть выполнено на удаленном сервере, в отдельный сценарий оболочки, скопируйте его туда с остальными данными и запустите с ssh username @ host / path / to / my / script .

    Таким образом:

#!/bin/bash
# your local script
scp ./inputs* ./do_stuff.sh username@host:/home/tmp
ssh username@host /home/tmp/do_stuff.sh
scp username@host:/home/tmp/outputs* .

#!/bin/bash
# script for remote execution do_stuff.sh
cd /home/tmp
module purge
module load gcc/4.6.0 icc/11.1.075  ifort/11.1.075 compilers-extra mpi-openmpi/1.4.3-icc-11.1 vasp
mpirun -np 20 vasp > out.vasp 2>&1

замените входов * / выходов * на все, что вам нужно скопировать в / из кластера - вы, вероятно, не захотите копировать входы обратно. Обратите внимание, что сценарий, обозначенный как do_stuff.sh , должен быть помечен как исполняемый. Если даже это не сработает (поскольку файловая система, в которую вы ее копируете, смонтирована с параметром noexec , используйте ssh username @ host bash /home/tmp/do_stuff.sh. Или вы можете просто перенаправить его на удаленный компьютер:

cat do_stuff.sh | ssh username@host bash -

2) Если вы запускаете это на headnode (что, похоже, так и есть), вы можете избавиться от одного направления соединения scp, запустив команду scp снова на головном узле .

2
27.01.2020, 21:23

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

Вы можете прочитать это руководство, чтобы понять идею: http://www.shellhacks.com/en/Running-Commands-on-a-Remote-Linux-Server-over-SSH

0
27.01.2020, 21:23

Я бы посоветовал вам иметь ваш скрипт дома для удаленного выполнения, а затем вызвать ваш скрипт, как,

ssh user@host 'bash -s' < local_script.sh

По сути, из вашего скрипта с безпассовым доступом, после ssh имя пользователя@host, скрипт не будет выполнен. Это можно легко проверить.

Тестирование

Имейте эти 2 строки в скрипте и попробуйте запустить скрипт с вашей локальной машины.

ssh username@host
hostname

Обычно мы ожидаем, что он напечатает имя удаленной машины, так как у нас есть ssh'ed для него. Но это не так. Он просто входит в систему на удалённой машине и когда вы выходите из удалённой машины, тогда только он будет печатать имя хоста (Убедитесь, что проверяете, какое имя хоста он печатает, это будет печататься имя хоста локальной машины ).

Теперь, как я уже предлагал, если у вас есть скрипт в вашем локальном доме и вы называете его, как,

ssh user@host 'bash -s' < local_script.sh

На выходе в данном случае будет имя машины удаленного хоста (Убедитесь, что вы удалили строку ssh из скрипта, так как сейчас это бесполезно).

1
27.01.2020, 21:23

Теги

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