현재 쉘 세션이 SSH를 통해 시작되었는지 확인하려면 환경 변수나 시스템 명령어를 사용할 수 있습니다.
1. 환경 변수 확인:
SSH 연결 시 일반적으로 몇 가지 환경 변수가 설정됩니다. 이를 확인해보세요:
- **SSH_CLIENT_VAR:** 클라이언트 IP 주소, 클라이언트 포트 및 서버 포트 정보를 포함합니다.
- **SSH_CONN_VAR:** 클라이언트 IP 주소, 클라이언트 포트, 서버 IP 주소 및 서버 포트 정보를 포함합니다.
- **TTY_SSH_VAR:** SSH 세션에 할당된 가상 터미널의 이름을 포함합니다.
다음과 같이 해당 변수들을 확인할 수 있습니다:
printf "%s\n" "$SSH_CLIENT_VAR"
printf "%s\n" "$SSH_CONN_VAR"
printf "%s\n" "$TTY_SSH_VAR"
이러한 변수들이 값으로 채워져 있으면 SSH 세션이라는 것을 나타냅니다. 비어 있다면 로컬 콘솔 세션이 있을 가능성이 큽니다.
2. `who` 또는 `w` 명령어 사용:
`who`와 `w` 명령어는 현재 시스템에 로그인한 사용자들의 정보를 보여줍니다.
- `who`: 사용자명, 터미널, 로그인 시간 등을 표시합니다. `FROM` 열에 IP 주소나 호스트네임이 표시되면 원격 연결임을 의미합니다.
- `w`: `who`와 유사한 정보를 제공하지만 현재 프로세스와 활동 상세정보도 포함합니다.
현재 세션에 대한 특정 정보를 보기 위해 다음 명령어를 사용할 수 있습니다:
who am i
또는
who -m
출력은 사용자명, 사용 중인 턈미널(예: `pts/0`) 및 SSH로 연결된 경우 원격 호스트나 IP 주소를 보여줍니다.
3. `loginctl` (systemd를 사용하는 시스템에서):
`systemd`를 사용하는 시스템에서는 `loginctl`을 이용해 세션 정보를 조회할 수 있습니다.
loginctl show-session --value -p Remote "$(cat /proc/self/sessionid)"
출력이 `yes`라면 일반적으로 SSH를 통한 원격 세션이라는 것을 나타냅니다.
4. `ps` 명령어 및 `pstree` 활용:
현재 쉘이 실행 중인 프로세스 트리를 살펴보아 `sshd`가 조상 프로세스인지 확인할 수 있습니다.
pstree -sap $$ | grep -c 'sshd'
출력이 `1`이라면 `sshd`가 프로세스 계층에 존재하며, 이는 SSH 세션이라는 것을 의미합니다.
요약하자면, `SSH_CLIENT`, `SSH_CONN_VAR`, 또는 `TTY_SSH_VAR` 환경 변수의 존재 여부를 확인하는 것이 가장 직접적인 방법입니다. 대안적으로 `who am i` 또는 `pstree`를 사용하여 같은 정보를 얻을 수도 있습니다.
6월 12일 19:14에 게시됨