원격 서버에서 일련의 작업을 시작하는 쉘 스크립트가 있습니다. 서버에 SSH를 통해 연결하고(비밀번호가 필요함) 스크립트를 수동으로 실행할 수 있지만 일부 단계는 로컬에서도 수행되므로 수동으로 SSH를 통해 수행하는 작업은 피하고 싶습니다. SSH/로그인을 자동화한 다음 더 큰 로컬 쉘 스크립트 내에서 명령을 실행하는 방법이 있습니까?
답변1
원격 서버에서 실행해야 할 명령이 많다면, 쉘 스크립트로 생성해 한 번 업로드한 후 ssh 명령을 기반으로 한 번 실행하는 것이 좋습니다.
스크립트에 대한 실행 권한이 있는지 확인하고 대화형 로그인 스크립트에서 설정한 변수나 경로(예: .bashrc)와 같은 일반 셸 세션에서 얻은 정보에 의존하지 않는지 확인하세요. 이러한 정보는 원격을 통해 실행되지 않기 때문입니다. ssh 명령 명령할 때.
또한 스크립트의 "return"을 확인하여 명령이 예상대로 완료되는지 확인하는 것을 잊지 마십시오.
답변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
.....