Bash 스크립트에서 사용자의 SSH 클라이언트 IP 주소를 얻는 방법이 있습니까?

Bash 스크립트에서 사용자의 SSH 클라이언트 IP 주소를 얻는 방법이 있습니까?

애플리케이션 제한으로 인해 동일한 로그인을 사용해야 하는 두 명의 사용자가 있습니다.

이러한 사용자들은 쉘 프롬프트가 어떤 모습이어야 하는지에 대해 매우 다른 의견을 가지고 있습니다. 그 중 한 명은 심지어 색상 미각 수정을 고집하기도 합니다. 이로 인해 .bashrc PS1 분쟁이 발생했습니다. 나는 그들에게 각자의 선호도를 설정할 수 있는 스크립트를 주었지만... 그냥 복잡하다고만 말씀드리겠습니다.

다행히 둘 다 알려진 IP 주소가 있는 위치에서 연결됩니다. 사용자의 원격 IP 주소를 조건에 통합하여 추가 단계 없이 두 사람 모두에게 원하는 것을 제공할 수 있는 방법이 있습니까? 그들은 SSH를 통해 연결하고 있습니다.

답변1

OpenSSH SSH 클라이언트 매뉴얼( man 1 ssh)에서:

ENVIRONMENT는
ssh일반적으로 다음 환경 변수를 설정합니다.

[…]

SSH_CONNECTION연결의 클라이언트 및 서버 끝을 식별합니다. 변수에는 공백으로 구분된 4개의 값(클라이언트 IP 주소, 클라이언트 포트 번호, 서버 IP 주소 및 서버 포트 번호)이 포함됩니다.

[…]

당신 은 .bashrc다음과 같이 해야 합니다:

case "${SSH_CONNECTION%% *}" in
1.2.3.4|1.2.3.5 )
   PS1=…
   ;;
2.2.7.* )
   PS1=…
   ;;
# add support for more users if needed
esac

또는 좋아한다

if [ "${SSH_CONNECTION%% *}" = "1.2.3.4" ]; then
   PS1=…
else
   PS1=…
fi

답변2

키를 사용하여 SSH로 로그인하는 경우 다음과 같이 할 수 있습니다.

myip=`grep 'Accepted publickey for bozo' /var/log/auth.log | tail -1 | awk '{print $11}'`

그런 다음 $myip를 비교하세요. 비밀번호를 사용하는 경우 적절하게 수정하세요. (어떤 이유로든 사용자 이름이 bozo가 아닌 경우에도 수정하세요.)

(이것은 Ubuntu 및 기타 Debian 변형에서 작동합니다. 인증 로그 파일 위치/이름 및 정확한 형식은 다른 버전에 따라 다를 수 있습니다.)

관련 정보