다른 컴퓨터에 로그온하여 작업을 수행하는 bash 스크립트를 작성하는 방법은 무엇입니까?

bash 스크립트를 작성할 수 있습니까?

  1. 컴퓨터 A에서 시작하고 다른 컴퓨터에 로그인합니다. 머신 B by ssh (머신 A와 B 모두 Linux-Machines)
  2. 일부 파일을 머신 B에 복사
  3. 이 머신에서 주어진 Python 스크립트를 Python 스크립트로 실행합니다.
  4. 결과를 시스템 A로 다시 전송
  5. 시스템 B에서 로그 오프합니다.

기술적으로 가능합니까?

답변

물론 가능합니다.

scp file user@host: ssh user@host path_to_script scp user@host:file_to_copy ./ 

그게 다입니다. …

하지만 한 가지 문제가 있습니다. 암호를 세 번 입력해야합니다. ssh 키를 생성하고 이러한 키로 사용자를 인증 할 수 없도록하기 위해

ssh를 생성하려면 키는 ssh-keygen -t rsa를 실행하고, 질문에 답하고, 공개 키를 원격 호스트 (컴퓨터 B)에 ~/.ssh/authorized_keys 파일에 복사합니다. 개인 키는 ~/.ssh/id_rsa 로컬 컴퓨터 (A)에 있습니다.

댓글

  • 공개 키가 옵션이 아닌 경우 cat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/results
  • 와 같은 비밀번호 프롬프트를 최소화하기 위해 조잡한 작업을 수행 할 수 있습니다. 비밀번호를 사용하려면 ControlMaster=yesControlPath=/path/to/socketfile<을 정의하여 항상 OpenSSH '의 연결 풀링을 사용할 수 있습니다. / div>를 누른 다음 -f로 하나의 ssh 연결을 시작하여 백그라운드 ssh를 실행합니다. 모든 후속 SSH 연결에 동일한 소켓 파일을 사용하도록 지시하십시오.

Answer

단일 ssh 연결 / 세션 :

ssh user@host "cat > remote_dst; command; cat remote_src" < local_src > local_dst 

이것은 :

  1. 사본 local_srcremote_dst,
  2. command 실행,
  3. remote_srclocal_dst에 복사합니다.

하지만 commandstdout에 씁니다. 결과도 local_dst에 있습니다. commandstdin에서 입력을 읽으면 EOF를 수신합니다.

답변

단일 ssh 세션 내에서이 작업을 수행 할 수 있지만 파일 복사를 실행중인 명령과 결합하는 것은 약간 까다 롭습니다.

이 작업을 처리하는 가장 쉬운 방법은 세 가지 작업에 대해 별도의 SSH 세션을 실행하는 것입니다.

rsync -a inputs/ machineB:inputs/ ssh machineB "some command -i inputs -o outputs" rsync -a machineB:outputs/ outputs/ 

이 작업을 수행하려면 machineB에 세 번 인증해야합니다. 여러 번 인증을 방지하는 권장 방법은 최신 버전의 OpenSSH에서 연결 공유 기능을 사용하는 것입니다. B에 대한 마스터 연결을 한 번만 시작하고 SSH가 해당 마스터 연결에 자동으로 피기 백되도록합니다. ControlMaster autoControlPath 줄을 ~/.ssh/config 에 추가합니다. 그런 다음 백그라운드에서 마스터 연결을 시작한 다음 작업을 수행하십시오.

ssh -fN machineB # start a master connection in the background # Subsequent connections will be slaves to the existing master connection rsync -a inputs/ machineB:inputs/ ssh machineB "some command -i inputs -o outputs" rsync -a machineB:outputs/ outputs/ 

scp o를 사용하는 대신 rsync 파일을 복사하려면 SSHFS 아래에 원격 파일 시스템을 마운트하는 것이 더 쉬울 수 있습니다. 그런데 이렇게하면 마스터 연결 설정이 처리됩니다 ( “위에 표시된대로 ~/.ssh/config를 설정했다고 가정).

mkdir /net/machineB sshfs machineB: /net/machineB cp -Rp inputs /net/machineB/ ssh machibeB "some command -i inputs -o outputs" cp -Rp /net/machineB/outputs . 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다