ssh
나는 최근에 노트북을 구입하고 사용자가 GDM을 통해 로그인하면 역방향 터널을 설정하는 스크립트를 작성했습니다. 과거에 노트북을 도난당한 적이 있어서 이런 일이 다시 일어날 경우를 대비하고 싶었기 때문에 이렇게 했습니다.
다음 디렉토리에 스크립트를 배치했으며 사용자가 로그인할 때마다 GDM이 루트로 실행됩니다.
/etc/gdm/PostLogin/Default
스크립트 자체는 다음과 같습니다.
if [[ "$(users)" = "user user" ]]; then
while (( "$(netstat -an | grep -E "\:22[ \t]+" | grep ESTABLISHED | \
wc -l)" < "1" ))
do
ssh -fvN -p 22 -R tunnelport:localhost:sshdport [email protected]
sleep 20
done
fi
로그인하면 스크립트가 실행되지만 GDM을 통해 로그인하면 첫 번째 if
문이 실패합니다. 해당 문을 제거하면 명령이 if
중단됩니다 . ssh
내가 무엇을 할 수 있는지에 대한 아이디어가 있나요?
답변1
이 스크립트를 활성화하고 장황하게 만든 후 출력을 파일에 기록하면 문제의 원인을 더 쉽게 확인할 수 있습니다.
자세한 내용을 늘리려면 if
첫 번째 문 앞에 이것을 추가하세요.
set -x
스크립트가 모든 것을 파일에 기록하도록 하려면 이 SO Q&A 제목에 설명된 방법을 사용할 수 있습니다.모든 bash 스크립트 작업을 완전히 기록하는 방법은 무엇입니까?. 다음은 해당 게시물에서 대부분 발췌한 내용입니다.
#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>log.out 2>&1
# Everything below will go to the file 'log.out':
설명하다:
exec 3>&1 4>&2
리디렉션 이전 상태로 복원할 수 있도록 파일 설명자를 저장하거나 다음 리디렉션 이전 상태로 자체 출력을 사용합니다.
trap 'exec 2>&4 1>&3' 0 1 2 3
특정 신호에 대한 파일 설명자를 복원합니다. 서브쉘이 종료될 때 복원되어야 하므로 일반적으로 필요하지 않습니다.
exec 1>log.out 2>&1
stdout을 log.out 파일로 리디렉션한 다음 stderr을 stdout으로 리디렉션합니다. 동일한 파일에 들어가려면 순서가 중요합니다. stderr를 stdout으로 리디렉션하기 전에 stdout을 먼저 리디렉션해야 합니다.