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


11

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

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

이것은 기술적으로 가능합니까?

답변:


15

물론 가능합니다 :

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

그리고 그게 다야...

그러나 한 가지 문제가 있습니다. 비밀번호를 세 번 묻는 메시지가 나타납니다. ssh 키를 생성하고이 키로 사용자에게 권한을 부여 할 수 있습니다.

ssh 키 run을 생성하려면 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
Patrick

암호를 사용하려면 항상 ControlMaster=yes및 을 정의하여 OpenSSH의 연결 풀링을 사용한 ControlPath=/path/to/socketfile다음 하나의 ssh 연결을 시작 -f하여 백그라운드 ssh를 실행할 수 있습니다. 모든 후속 SSH 연결에 동일한 소켓 파일을 사용하도록 지시하십시오.
jsbillings

4

단일 ssh연결 / 세션으로 모든 작업을 수행 할 수 있습니다 .

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

이:

  1. 복사 local_srcremote_dst,
  2. 실행 command,
  3. 에 복사 remote_src합니다 local_dst.

그러나 command글을 쓰면 stdout결과도에 있습니다 local_dst. 경우 command입력에서 읽고 stdin, 그것을받을 것이다 EOF.


3

단일 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 또는 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 .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.