답변:
물론 가능합니다 :
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)에 저장해야합니다 .
ControlMaster=yes
및 을 정의하여 OpenSSH의 연결 풀링을 사용한 ControlPath=/path/to/socketfile
다음 하나의 ssh 연결을 시작 -f
하여 백그라운드 ssh를 실행할 수 있습니다. 모든 후속 SSH 연결에 동일한 소켓 파일을 사용하도록 지시하십시오.
단일 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 auto
ControlPath
~/.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 .
cat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/results