SSH 역터널링 없이 스크립트를 실행하기 위해 서버가 클라이언트에 신호를 보낼 수 있습니까?

SSH 역터널링 없이 스크립트를 실행하기 위해 서버가 클라이언트에 신호를 보낼 수 있습니까?

저는 경량 사용자 정의 파일 동기화 시스템을 직접 설정하려고 합니다. 서버가 특정 폴더의 변경 사항(사용법 inotify -m)을 모니터링하고 변경 사항이 감지되면 연결된 클라이언트에 이를 전파할 수 있기를 원합니다 .

내 첫 번째 생각은 클라이언트 시스템이 SSH 터널을 시작하도록 한 다음(을 사용하여 ssh -R 2222:127.0.0.1:22) 적절한 경우 서버가 클라이언트에 파일을 다시 보내도록 하는 것이었습니다. 하지만 프로세스를 자동화하려면 SSH 키를 설정해야 했는데, 이는 내가 모르는 사이에 서버가 손상되면 내 컴퓨터가 노출된다는 의미였습니다. 나는 chroot Jail과 같은 위험을 완화할 수 있는 방법이 있다는 것을 알고 있습니다.스폴리, 그런데 그냥 99%까지 채우려고 큰 구멍을 뚫는 건 좀 어설픈 것 같아요.

보안 문제가 허용으로 인한 것임을 알았습니다.서버가 클라이언트에 푸시, 갖는 것보다클라이언트가 서버에서 가져옵니다.. 동적 IP와 홈 라우터 뒤에 숨겨진 클라이언트가 서버의 신호에 대해 특정 포트를 모니터링할 수 있도록 터널을 여는 데 사용할 수 있는 다른 프로그램이나 프로토콜이 있습니까?아니요SSH 터널과 같은 작업을 위해 여시겠습니까?

답변1

첫째, 집에서 만든 "신호 솔루션"에는 명확하지 않은 경쟁 조건이 있을 수 있다는 점에 유의하세요. 마지막 신호를 처리하는 동안 어떤 신호도 놓치지 않도록 주의하세요!

간단한 아이디어는 서버가 해당 행을 로컬 파일에 추가한다는 것입니다. 따라서 모든 inotify의 결과는 다음과 같습니다.

date +"%s" >> /path/to/sync-signals.log

클라이언트에서 ssh/tail을 통해 파일을 감시하지만 모든 가져오기 작업은 클라이언트에서 호출됩니다.

ssh server "tail -n1 -f /path/to/sync-signals.log" | while read -r sigdate; do
    pull from server
done

이 솔루션은 "신호"를 놓치지 않아야 하지만 서버가 짧은 시간 내에 너무 많은 신호를 연결하면 불필요한 "풀"이 많이 발생할 수 있습니다. 따라서 클라이언트 측 while 루프는 어떻게든 마지막 "sigdate"를 현재 날짜와 비교해야 합니다. 또는 더 나은 방법은 서버가 어떻게든 신호를 지연시키는 것입니다(몇 초 후에도 아무런 변화가 없으면 행을 추가하기만 하면 됩니다).

관련 정보