SSH 키를 통해 로그인할 때 로그인한 사용자의 이메일을 어떻게 얻나요?

SSH 키를 통해 로그인할 때 로그인한 사용자의 이메일을 어떻게 얻나요?

저는 bash 쉘과 Ubuntu 18.04를 사용하고 있습니다. 상당히 표준적인 RSA 공개-개인 키 설정을 사용하여 서버에 SSH로 접속하고 공개 키를 서버의 .ssh/authorized_keys 파일에 넣었으며 항목은 다음과 같습니다.

ssh-rsa AAAAB…KKRaniLSv8mHQ== [email protected]

로그인 후 로그인 계정의 이메일을 알려주는 스크립트나 명령을 작성할 수 있나요? 위의 경우 스크립트를 출력하고 싶습니다.[이메일 보호됨].

편집하다:관련 로그인 사용자에 대한 sudo 권한이 없습니다.

답변1

공개 키 항목 끝 부분의 문자열을 캡처할 수는 없을 것 같지만 authorized_keys특정 SSH 키로 로그인하면 사용자 정의 스크립트가 트리거되도록 그렇게 할 수는 있습니다.

command="..."매우 간단한 개념 증명은 키 앞에 다음을 추가하는 것입니다.

command="echo [email protected] ; exec /bin/bash" ssh-rsa AAAAB…KKRaniLSv8mHQ== [email protected]

위의 내용은 다음 두 가지 이유로 매우 강력하지 않습니다.

  • 사용자가 자신의 명령을 실행하는 것을 방지합니다. 예상대로 작동하지 않습니다.ssh [email protected] some-command
  • 사용자 쉘은 /bin/bash.

위의 문제를 해결하려면 명령으로 사용할 스크립트를 작성하십시오.

#!/bin/bash
# Echo the email address
echo $1

if [[ -z $SSH_ORIGINAL_COMMAND ]] ; then
    # If the user is trying to execute a regular shell then find which shell
    exec $(getent passwd $(whoami) | awk -F: '{print $NF}')
else:
    # If the user is trying to execute another command then run that command
    exec $SSH_ORIGINAL_COMMAND
fi
  1. 적절한 장소에 보관하세요./home/username/.print_login_email.sh
  2. chmod를 사용하여 실행 가능하게 만듭니다. chmod u+x /home/username/.print_login_email.sh
  3. 항목 에 다음을 추가하세요 authorized_keys.
command="/home/username/.print_login_email.sh [email protected]" ssh-rsa AAAAB…KKRaniLSv8mHQ== [email protected]

더 안전한 대안

command="..." 호출 없이도 이 작업을 수행할 수 있지만 ~/.profile 또는 ~/.zshenv에서 체크인된 환경 변수를 사용하면 됩니다.

~/.ssh/authorized_keys

environment="SSH_USER=PUBKEYFROMJOEDOE1" ssh-rsa AAAAAB3Ny...
environment="SSH_USER=PUBKEYFROMJOEDOE2" ssh-rsa AAAAAB3Nz...

~/.zshenv|~/.profile

if [ -n "$SSH_USER" ]; then
  logger -ip auth.notice -t sshd "Accepted publickey for $SSH_USER"
  #This Part if ZSH-Specific
  export HISTFILE="$HOME/.zsh_$SSH_USER_history"
  if [ "$SSH_USER" != "DONTSENDMAILUSER" ]; then
    echo "User $SSH_USER has logged in on Hostname" | NULLMAILER_NAME="HOSTNAME LOGIN" mail -s "Notice from SSH-Login" [email protected]
  fi
fi

나는 보통 /etc/zsh/zshenv - ~crpb에 스크립트를 가지고 있습니다.

답변2

내 의견은

  • /var/log/audit/audit.logLinux 감사를 활성화하고 파일을 제공합니다.
    • /etc/audit/audit.rules이벤트를 캡처하려면 규칙을 추가해야 할 수도 있습니다 . 그렇지 않으면...
    • tail -f /var/log/audit/audit.log캡처된 SSH 로그인 이벤트가 발생하는 대로 확인하세요.
  • 따라서 로그인한 후 나중에 언제든지 매핑된 사용자의 사용자 ID가 포함된 audit.log를 통해 이러한 이벤트를 다시 볼 수 있습니다./etc/passwd
    • 원시 데이터 audit.log에는 epoch-time 타임스탬프 형식이 있으므로 이를 인간의 mm/dd/yy hh:mm:ss 형식으로 변환해야 합니다. 이를 수행하는 방법에는 여러 가지가 있습니다.
  • 그런 다음 해당 사용자 이름 행에서 이름과 성을 가져 /etc/passwd와서[이메일 보호됨]에서.

아마도 /var/log/secure그것은 당신에게도 효과가 있을 것입니다.

관련 정보