SSH 세션에서 명령이 완료되면 OSX에서 로컬 명령 실행

SSH 세션에서 명령이 완료되면 OSX에서 로컬 명령 실행

내 OS/X 노트북에서 "say done"이라고 입력하면 내 Mac에서는 "done"이라고 말합니다.

로컬에서는 다음을 수행합니다.

do-something.sh && say done

그러면 스크립트가 완료될 때까지 별도의 창/데스크톱에서 작업할 수 있습니다.

하지만 이제는 Mac에서 원격 Linux 시스템으로 SSH를 통해 연결됩니다. 내가 원하는 것은 특정 명령이 끝나면 "say done"을 실행하도록 Mac에 지시할 수 있는 것입니다. 그렇게 할 수 있는 좋은 방법이 있나요?

답변1

이를 즉각적으로 생각해낸 동료 A골든에게 감사 인사를 전한다. 이것은 그들의 반응을 잘라내어 붙여넣은 것으로, 작동하고 완벽하게 작동합니다.

I picked "say-hi-locally" and set it up on my linux server as:
alias say-hi-locally="echo EMIT SAY HI"

Then, since I use ITerm2 as my local terminal, I set up a trigger in ITerm2 with the regexp "EMIT SAY HI" and told that to run the local command "say hi"

Now I can do:
do-something.sh; say-hi-locally

and when it finishes it will echo "EMIT SAY HI" which ITerm2 will then pick up and then my computer says "hi" to me! :-)

답변2

Mac에서 수신한 모든 내용을 보내는 TCP 서버를 시작합니다 say.

mac $ while true; do nc -l 1234 | say; done

그런 다음 SSH를 사용할 때 -R포트 1234를 서버에 전달하는 데 사용합니다.

mac $ ssh -R 1234:localhost:1234 linux

이제 Linux 서버에는 Mac의 nc 서버에 대한 터널이 있어야 하며 nc여기에 텍스트를 보내는 데 사용할 수 있습니다.

linux $ echo done | nc localhost 1234

답변3

Mac에 SSH 서버가 필요합니다. 그런 다음 다음을 수행할 수 있습니다.

[you@mac]$ ssh linux
[you@linux]$ interactive_cmd; ssh mac say done

Linux 호스트에 로그인하고 명령을 실행하면 완료되면 Linux 호스트 SSH가 Mac으로 돌아가서 명령을 실행합니다 say.

답변4

ssh linux do-something.sh && say done

원하는 일을 하는 것 같습니다. 원격 호스트와 Mac 간의 일부 통신을 구현하는 것은 불가능해 보입니다.

더 많은 명령을 실행하고 대기 시간이 걱정된다면 옵션을 사용하세요 ControlMaster( ControlPersist이미 답변된 질문이 많습니다).

관련 정보