한 서버에서 ksh/sh 스크립트의 일부를 실행한 다음 다른 서버로 ssh를 실행하고 나머지 스크립트를 계속할 수 있습니까? 아니면 해결책이 있나요?
서버에 액세스할 때마다 인증할 필요가 없는 사용자가 있으므로 키보드 조작 없이 한 서버에서 다른 서버로 이동할 수 있습니다.
나는 일부 논리를 다른 스크립트로 분리하려고 시도했습니다.
MYSCRIPT="nohup ksh myscript.ksh > mylog.log &"
ssh servername ${MYSCRIPT}
이것을 시도했지만 다른 서버에서 스크립트를 실행하지 않는 것 같습니다.
위의 전체 코드는 for
루프의 일부입니다. 서버 목록에 대해 동일한 스크립트를 실행합니다.
테스트 목적으로 목록에는 두 개의 서버가 있습니다. 이상하고 뒤틀린 이유로 인해 마지막(또는 두 번째) 서버 스크립트만 예상대로 작동합니다.
Myscript.ksh는 모든 서버에 표시됩니다. 모든 서버에 표시되고 실행 가능합니다.
답변1
여러 번 로그인하지 않고도 다른 서버에서 일련의 명령을 실행하고 싶은 것 같습니다. 이를 달성하려면 다음을 수행할 수 있습니다.
local_command sequence
ssh remote-server << End-Of-File
remote_command 1
remote_command 2
remote_command 3
End-Of-File
이 작업이 실행 remote_command 1
되고 완료되면 실행됩니다 remote_command 2
. 그러면 remote_command 3
모두 원격 서버에 저장됩니다.
답변2
솔직히 말해서 귀하의 표현이 다소 모호하지만 가능한 이유를 추적해 보겠습니다.
설명하는 내용은 제대로 작동하지만 ssh-copy-id
소스 코드를 참조하여 자신의 스크립트(OpenSSH와 함께 번들로 제공되는 쉘 스크립트)와의 차이점을 찾아보세요.
명령이 컴퓨터 중 하나에서 작동하지 않는다고 말씀하셨는데, 아마도 서버에 처음부터 스크립트가 시작되지 않도록 하는 다른 설정이 있을 수 있습니다.
또한 인증에 대해 언급하셨으므로 비밀번호 없는 공개 키 인증을 사용하고 관련 키로 승인된 명령을 제한하고 싶을 수도 있습니다. man ssh
섹션을 참조하세요 AUTHORIZED_KEYS FILE FORMAT
.