원격 컴퓨터에서 데이터를 복사, 실행 및 검색하는 방법은 무엇입니까?

원격 컴퓨터에서 데이터를 복사, 실행 및 검색하는 방법은 무엇입니까?

원격 컴퓨터에서 몇 가지 계산을 실행하려고 합니다. 기본적으로 일부 파일을 컴퓨터에 복사하고, 소프트웨어를 로드하고, 계산을 수행한 다음 데이터를 검색하고 싶습니다. 이를 위해 비밀번호 없는 연결을 만들었습니다. 내가 시도한 것은 다음과 같습니다.

#!/bin/bash
scp ./* username@host:/home/tmp
work=$pwd
ssh username@host
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 &
scp ./* username@headnode:$work

스크립트는 파일을 복사하고 원격 시스템에 로그인할 뿐 어떤 계산도 시작하지 않습니다.

답변1

귀하의 문제가 무엇인지 잘 모르겠지만 제 의견 중 두 개가 너무 깁니다.

  1. 로그인하자마자 host(라인 4) 현재 스크립트가 중지되고 대화형으로 일부 작업을 수행할 때까지 기다립니다. 로그아웃할 때만 스크립트가 계속됩니다(아마도 원하는 것이 아닐 수 있음).

    따라서 원격 서버에서 실행하려는 모든 것을 독립형 쉘 스크립트에 넣고 나머지 데이터와 함께 scp하여 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

inputs*/를 클러스터로 또는 클러스터에서 복사해야 하는 항목으로 바꾸십시오 outputs*. 아마도 입력을 다시 복사하고 싶지 않을 것입니다. 다음을 참조하는 스크립트는 do_stuff.sh실행 가능으로 표시되어야 합니다. 그래도 작동하지 않으면(복사하려는 파일 시스템이 noexec해당 옵션으로 마운트되어 있기 때문에) 다음을 사용하십시오 ssh username@host bash /home/tmp/do_stuff.sh. 또는 원격 시스템으로 파이프할 수 있습니다.

cat do_stuff.sh | ssh username@host bash -

2) 이 프로그램을 실행 중인 경우(표시되는 것처럼 보임) headnode프로그램을 다시 실행하여 한 방향의 scp 연결을 제거할 수 있습니다.scpheadnode

답변2

원격 실행을 위해 스크립트를 집에 보관한 다음 스크립트를 호출하는 것이 좋습니다.

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

기본적으로 비밀번호 없이 접근할 수 있는 스크립트에서는 그 이후에는 ssh username@host스크립트가 실행되지 않습니다. 이것은 테스트하기 쉽습니다.

시험

이 두 줄을 스크립트에 넣고 로컬 컴퓨터에서 스크립트를 실행해 보세요.

ssh username@host
hostname

일반적으로 SSH를 통해 연결했기 때문에 원격 컴퓨터 이름이 인쇄될 것으로 예상합니다. 그러나 그것은 진실이 아니다. 단지 원격 시스템에 로그인하고 exit원격 시스템에서 로그아웃할 때 호스트 이름(인쇄되는 호스트 이름을 확인하세요. 로컬 컴퓨터의 호스트 이름이 인쇄됩니다.).

이제 제가 제안한 대로, 여러분의 집에 스크립트가 있고 이름을 지정하면

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

이 예의 출력은 원격 호스트 이름(이제는 쓸모가 없으므로 스크립트에서 ssh 줄을 제거하십시오.).

답변3

기본적으로 스크립트가 원격 시스템에서 계속되기를 원하지만 그런 일은 발생하지 않으며 로컬 시스템에서 실행됩니다. 원하는 것을 달성하려면 SSH를 통해 일련의 명령을 원격 시스템에 전달해야 합니다.

이 가이드를 읽고 아이디어를 얻을 수 있습니다.http://www.shellhacks.com/en/Running-Commands-on-a-Remote-Linux-Server-over-SSH

관련 정보