내 노트북에서 SSH를 통해 액세스할 수 있는 서버가 있습니다.
나는 주어진 스크립트를 시작하기 위해 서버에 신호를 보내는 스크립트를 랩톱에서 실행할 수 있기를 원합니다.
어떻게 해야 하나요?
답변1
ssh remotehost 'command1 ; command ; command3'
또는 명령 1이 성공하면 명령 2를 실행하고 명령 2가 성공하면 명령 3을 실행하려는 경우:
ssh remotehost 'command1 && command && command3'
쉘 인용 문제에 특별한 주의를 기울여야 합니다. 원격 쉘에서 명령을 실행하기 위해 로컬 쉘에 명령을 입력하면 매우 복잡해질 수 있습니다(로컬 쉘을 사용하는 경우에도 정말 문제가 발생할 수 있음). 예를 들어, 다음 두 명령의 차이점을 고려해보세요.
ssh remotehost 'ps hu -Csshd | awk "{print \$2}"'
ssh remotehost 'ps hu -Csshd | awk "{print $2}"'
첫 번째는 sshd 프로세스의 PID를 인쇄합니다. 두 번째는 sshd 프로세스의 전체 ps hu
목록을 인쇄합니다. 이스케이프되지 않은 $2는 빈 문자열이므로 awk 명령은 다음과 같습니다.{print }
세 번째 옵션은 원격 호스트에서 ps를 실행하고 로컬에서 awk를 실행하는 것입니다.
ssh remotehost ps hu -Csshd | awk '{print $2}'
위의 두 명령에서 인용된 문자열 전체는 ssh 명령에 제공한 인수이기 때문에 원격 호스트에서 실행됩니다. 이 예에서는 |. 원격으로 실행됩니다(다시 말하지만 "ps", "hu" 및 "-Csshd"는 ssh 명령에 대한 인수이고 나머지 줄은 로컬로 실행되기 때문입니다).
한 줄로 실행하려는 것보다 더 복잡한 작업의 경우(또는 쉘 참조가 엉망이 되는 경우) 쉘 스크립트를 작성하여 원격 호스트에 복사한 다음 ssh를 사용하여 실행할 수 있습니다.
vi myscript.sh
chmod +x myscript.sh
scp myscript.sh remotehost:/usr/local/bin/
ssh remotehost myscript.sh
원하는 곳에 스크립트를 복사할 수 있지만 a) 디렉토리에 대한 쓰기 권한이 필요하고 b) 실행하지 않는 한 noexec로 마운트된 파일 시스템에 있을 수 없습니다(일반적이지는 않지만 때로는 /tmp가 noexec로 마운트됨). 다음 명령을 사용합니다. "/path/to/interpreter /path/to/script" - 예:/bin/bash /tmp/myscript.sh