로컬 쉘 스크립트 내에서 원격 스크립트를 ssh하고 실행하는 방법은 무엇입니까?

로컬 쉘 스크립트 내에서 원격 스크립트를 ssh하고 실행하는 방법은 무엇입니까?

원격 서버에서 일련의 작업을 시작하는 쉘 스크립트가 있습니다. 이 서버에 SSH를 통해 접속할 수 있지만(비밀번호가 필요합니다!) 스크립트를 수동으로 실행할 수 있지만 로컬에서도 수행되는 특정 단계가 있으므로 수동으로 SSH를 통해 작업을 실행하는 것을 피하고 싶습니다. 자동으로 ssh/로그인을 수행한 다음 더 큰 로컬 쉘 스크립트 내에서 명령을 시작하는 방법이 있습니까?

답변1

원격 서버에서 실행할 명령이 많은 경우 해당 명령을 한 번 업로드한 다음 ssh 명령에 대해 한 번 실행하는 쉘 스크립트로 생성하는 것이 좋습니다.

스크립트에 대한 실행 권한이 있는지 확인하고 대화형 로그인 스크립트에 의해 설정된 변수나 경로와 같이 일반 셸 세션에서 얻은 정보에 의존하지 않는지 확인하세요. 예: .bashrc는 실행되지 않습니다. 원격 SSH 명령을 통해 명령을 실행할 때.

또한 명령이 예상대로 완료되는지 확인하기 위해 스크립트의 "반환"이 선택되어 있는지 확인하는 것을 잊지 마십시오.

답변2

원격 호스트에서 스크립트/명령을 실행하려면 다음을 실행하세요.

ssh [<USER>@]<REMOTE_HOST> [-f] <REMOTE_COMMAND>

-f명령이 완료될 때까지 기다리지 않고 ssh가 즉시 백그라운드로 이동하도록 하려면 이 옵션을 추가하세요 .

로그인과 관련하여 자동 비밀번호 식별은 일반적으로 나쁜 생각입니다. 설정이 실제로 불가능한 경우 위의 설명에서 제안한 대로 개인/공개 키 쌍을 생성하고(개인 키는 로컬 컴퓨터에 저장되고 공개 키는 원격 컴퓨터에 저장됨) 이를 인증에 사용합니다. , sshpass다음을 통해 원격 세션/명령을 시작할 수 있는 도구로 되돌려야 합니다 .

sshpass -p <YOURPASSWORD> ssh [<USER>@]<REMOTE_HOST> [-f] [<REMOTE_COMMAND]

답변3

ssh공개/개인 키 인증을 사용하여 비밀번호 없이 인증을 설정할 수 있습니다 . 그렇게 하려면 키 쌍( ssh-keygen)을 생성하고 공개 키를 서버의 사용자 ~/.ssh/authorithed_keys 파일에 추가하면 됩니다.

#!/bin/bash
ssh user@server RemoteCommand #man ssh for more info
local command1
local command2
.....

관련 정보