쉘 스크립트의 SSH 쉘 스크립트의 SSH

쉘 스크립트의 SSH 쉘 스크립트의 SSH

지금 당장 이것을 테스트할 능력이 있는지는 모르겠지만, 다음과 같이 할 수 있는지 제안할 수 있는 사람이 있는지 궁금합니다.

Run a shell script
    Shell Script SSH's into a machine (Connection requires SSH key only)
        Stuff is run on that machine
        Script run on that machine SSH's into another machine (Connection requires SSH key and password)
            Stuff is run in that machine
            Exit from that machine
        Stuff is run in that machine
        Exit from that machine
    More stuff happens for a few hours

아마도 필요한 수준의 스크립트를 조립하고 실행시키는 경우일 뿐일까요? 다른 SoF 문제의 예를 빌리려면:

sshScript='
    ls -la
    sshScript2=`
        ls -la
    `
    ssh -t ${UserName}@server "${sshScript2}"
    ls -la
'
ssh -t ${UserName}@server "${sshScript}"

sudo의 경우에는 무엇을 실행해야 합니까 sudo -s -u user bash -c script?

이로 인해 무한 루프가 발생하는지 확실하지 않으며 연결 중인 컴퓨터가 생산 중이므로 테스트 목적으로 해당 컴퓨터를 손상시킬 위험을 감당할 여유가 없습니다.

답변1

이 경우 나는 일반적으로 heredoc를 사용하여 원격 셸에 스크립트를 제공합니다. 그러나 스크립트가 표준 입력의 사용자 입력을 요구하는 경우에는 사용할 수 없습니다.

ssh ${UserName}@server <<EOF1
ls -la
ssh ${UserName}@server <<EOF2
ls -la
EOF2
ls -la
EOF1

답변2

예. 가능한. 그러나 스크립트가 더 길면 ControlMasterAnsible처럼 더 많은 명령에서 이 작업을 수행하는 것이 좋습니다. 그렇지 않으면 게시물에서 볼 수 있는 모든 따옴표, 백슬래시 및 항목에서 길을 잃을 것입니다.

scp script1.sh remote:/tmp/
ssh remote "bash /tmp/script.sh"

또한 script.sh원격 컴퓨터에서 다른 컴퓨터로 더 유사한 배치를 포함할 수 있습니다. 스크립트에는 rm /tmp/script.sh자동 정리 기능 도 포함될 수 있습니다 .

답변3

-q -o "BatchMode=yes"" " 옵션을 사용하는 것뿐만 아니라 다음을 사용하는 것이 좋습니다.공개키 인증.

또한 주어진 명령의 잠재적인 로컬 해석과 관련된 문제를 피하기 위해 원격 서버에서 실행하려는 명령을 작은따옴표로 묶는 것을 고려하십시오.

예를 들어:ssh -q -o "BatchMode=yes" user@server 'ls -al'

이는 매우 일반적인 기술(중첩 SSH)입니다. 이를 구현하는데는 문제가 없습니다.

관련 정보