[리눅스, Mac] fswatch 로 .ssh/config 파일 모니터링하여 ssh 포트포워딩 지속하기 Computer Tip

지난번 원격 Linux에 VSCode 로 접속하여 작업하는 것을 살펴본 적이 있습니다.
이곳에서 ~/.ssh/config 에서 원격 VM 서버에 포트포워딩을 통하여 어디에서든 작업이 가능하게
해 보았는데, 문제는 이 config 파일이 종종 변경되고는 하는데 해당 내용이 변경될 때마다 
알아서 해당 서버로 SSH 연결을 할 수 있는가 하는 주제로 고민을 해 보았습니다.

우선 Mac 이나 리눅스에서 특정 파일(또는 폴더)이 변경되었는가를 체크하는 것으로 
Python의 watchdog 및 watchmedo 쉘 명령을 살펴보았으나 변경시 이벤트가 자동으로 
두 번씩 떠서 다른 것을 알아보았습니다.

역시나 모든 것을 다 알수는 없으나 이런 좋은 유틸을 왜 이제서야 알았나 싶었습니다.

우분투 데비안에서는 fswatch 패키지로 잘 설치되었고,
MacOS 에서도

brew install fswatch 
명령으로 잘 설치되었습니다.

fswatch의 간단 사용법은

fswatch -o {지켜볼파일} | xargs -n1 -I{} {실행스크립트}
로 특정 파일이 변경되면 해당 스크립트가 실행되는 구조입니다.

그리고 원격 서버에 포트포워딩을 위하여 접속하는 것은

ssh -nNT {원격서버} &
로 접속 하면 됩니다.
-n : stdin 이 없다는 것을 알려줌
-N : 원격 명령이 없다는 것을 알려줌
-T : 슈도 터미널을 띄우지 않음

다음과 같이 쉘스크립트를 만들어,

#!/bin/bash
SERVER=hvrouter
PID=$(ps -ef | grep "ssh -nNT $SERVER" | grep -v grep | awk '{print $2;}')
if [ ! -z $PID ];then
        kill $PID
fi
ssh -nNT $SERVER &

라고 server_ssh.sh 라고 저장합니다.
(SERVER 변수에 원하는 서버 이름으로 바꿔줍니다)

해당 내용은 간단히 이전에 돌고 있는 ssh 연결이 있으면 해당 연결을 kill 하고
없어도 새로 연결을 여는 것입니다.

그 다음, 다음과 같이

#!/bin/bash
ps -ef | grep 'fswatch -o /Users/mcchae/.ssh/config' | grep -v grep
if [ $? -eq 0 ];then
        exit 0
fi
server_ssh.sh
fswatch -o /Users/mcchae/.ssh/config | xargs -n1 -I{} server_ssh.sh

라고 server_watch.sh 를 만들어 줍니다.
(mcchae 대신 자신의 사용자 계정으로 바꿔 줍니다)

이 간단 쉘의 명령은 만약 이전에 돌던 fswatch 가 있으면 무시하고 종료하고
없으면 server_ssh.sh 를 돌립니다.

그러고 
crontab -e
로 크론탭을 열어

* * * * * /Users/mcchae/.ssh/server_watch.sh
라고 넣어줍니다.

그러면 config를 바라보고 있다가 변경되면 알아서 다시 접속을 해 놓을 것입니다.


어느 분께는 도움이 되셨기를 ..



덧글

댓글 입력 영역

구글애드텍스트