[server] 로컬 컴퓨터에서 셸 스크립트를 사용하여 원격 컴퓨터에서 명령을 실행 한 다음 로컬 컴퓨터에서 계속

문제는 이것입니다 : 원격 컴퓨터에서 파일을 복사하고 싶습니다.

원격 서버에서 연결을 끊고 로컬 컴퓨터 내에서 scp를 사용하여 원격 컴퓨터에 연결하고 저장된 파일의 위치를 ​​얻는 쉘 스크립트를 작성하는 방법을 찾고 있습니다. 파일을 복사하십시오.

특히 스크립트에서 어떻게 원격 컴퓨터에 연결하고 해당 컴퓨터에서 작업을 수행하는지 알고 싶습니다. 연결을 끊고 로컬로 계속 실행하십시오.



답변

해결책 1 :

remote_output="$(ssh user@host "remote command")"
scp "user@$host:$remote_output" /local/path

이것은 원격 시스템에 연결하고 일부 명령을 실행하며 출력을 로컬 시스템의 변수에 복사하여 작동합니다. 파일 경로를 원격으로 에코하여 로컬로 캡처한다고 가정 해보십시오.

해결책 2 :

ssh user@host "determine_path; cat filename" >local_filename

원격에서 직접 파일을 찾아서 출력하고 로컬로 파일로 리디렉션하여 작동합니다. 이것은 scp를 건너 뜁니다. “cat”이전 단계에는 출력이 없어야합니다 (&> / dev / null로 해결할 수 있음).


답변

다음 형식으로 스크립트를 작성할 수 있습니다.

command1
command2
...
ssh user@machine command3
...
command4
command5

command3비밀번호를 묻지 않고 실행 하려면 SSH 키를 설정해야 합니다.


답변

복사하려는 파일을 식별하는 방법과이 식별을 수행하는 원격 시스템에서 실행될 스크립트 또는 명령 세트를 작성할 수 있거나 이미 가지고 있다는 것을 이미 알고 있다고 가정합니다. .

또한 해당 명령이 표준 출력에서 ​​파일에 대한 전체 경로 또는 파일에 대한 상대 경로를 복사에 사용되는 SSH 사용자의 홈 디렉토리와 관련하여 인쇄한다고 가정합니다. 필자의 예제에서 스크립트 이름은 “getfilepath.sh”이지만 쉘 스크립트 일 필요는 없지만 다른 실행 파일이거나 일련의 명령 일 수도 있습니다.

# Script to be executed on local machine.

# put any leading local commands here.

FILE=$(ssh user@emote getfilepath.sh);
scp user@remotehost:"$FILE" .

# put any trailing local commands here.

위 코드에서 “$ ()”표기법은 명령의 표준 출력을 쉘 변수로 캡처하는 방법입니다. 상당히 표준 적이지만, 이해하지 못하는 쉘을 사용하는 경우, 대부분의 미국 키보드에서 1 키 왼쪽의 악센트 표시 인 “백 틱”으로 명령을 둘러 쌀 수 있습니다.


답변

모든 작업을 수행하는 원격 시스템에서 예약 된 작업을 트리거 할 수 있습니다.

이렇게하면 복사하려는 파일의 위치를 ​​검색하는 동안 원격 시스템에 연결되지 않을 수 있습니다.

나는 이것을하고있다 :

comand 줄은 내 경우에 배치 스크립트를 실행하는 예약 된 작업을 트리거합니다.

schtasks /run /s remoteserver /u %user% /p %password% /tn "scheduledtaskname"

친애하는


답변