SSH 로그인 및 / 또는 로그 아웃시 (시스템) 스크립트 실행


12

OpenSSH 서버가 사용자가 SSH를 사용하여 로그인 할 때마다 호스트 이름이나 IP 및 사용자 이름을 전달하는 것이 이상적입니다. 또한 세션이 종료 될 때마다 (사용자 이름을 전달 함) 스크립트를 실행하고 싶습니다. 이 스크립트는 사용자 세션에서 실행되지 말고 시스템 전체에서 실행해야합니다.

아이디어는 로그인 및 로그 아웃시 (예 :을 사용하여) 오디오 경고 espeak를 표시하고 외부 디스플레이에 정보를 표시하는 것입니다.

나는이 것을 본 적이 pam-scripts패키지 그러나 이것은 내가 원하는 않으며, 사용 방법에 있는지 확실하지 않습니다.

답변:


10

요청한 사용자 (또는 특정 명령을 제공하지 않은 경우 쉘) 대신 SSH 사용자에게 명령을 강제 실행할 수 있습니다. 이것은 같은과 그 명령을 지정하여 수행 할 수 ForceCommand /root/ssh-wrapper있는 /etc/ssh/sshd_config(그것은없이 스크립트가 위치하지 않는 경우 또는이 이름을 어떻게 바로 확인은 모든 사용자와 IT에 SSHD 구성 파일 포인트에 의해 실행되어 있는지 확인). 또한 다시 시작 / 다시로드해야합니다 sshd. 원래의 명령을 받는 액세스 강제 명령 으로 $SSH_ORIGINAL_COMMAND.

방금이 스크립트를 해킹했습니다.

#! /bin/sh

# add logger options when needed
log="logger -t ssh-wrapper"

# find IP address
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

$log $USER login from $ip
espeak "$USER just logged in from $ip" > /dev/null 2>&1

$log command: ${SSH_ORIGINAL_COMMAND:-shell}
${SSH_ORIGINAL_COMMAND:-shell}

$log $USER logout
espeak "$USER just logged out" > /dev/null 2>&1

이제 로그인하거나 로그 아웃 할 때마다 음성이 알려주고 로그 항목이 syslog에 기록됩니다. 또한 명령을 기록합니다. sshd 사용법을 "따르기"위해 다음과 같은 것을 사용할 수 있습니다.

tailf /var/log/syslog | grep ssh-wrapper

이 스크립트는 대부분 테스트를 거치지 않았으므로 자신의 책임하에 사용하십시오! ;-)

추신 :이 스크립트는 로그인 한 사용자로 실행되므로 더 많은 기능을 추가하기 위해 스크립트를 변경하면 원하는 모든 것을 수행 할 수 없습니다 ...


안녕하세요, 사용자가 ssh 클라이언트로 창을 닫았을 때 상황을 감지하는 방법이 있습니까? 당신의 스크립트는이 상황에 영향을 미치지 않습니다. 감사합니다.
Dmitry Eskin

해야 shell$ {SSH_ORIGINAL_COMMENT : -shell}에서 예를 들어, 쉘의 실제 경로로 대체 될 수있다. / bin / bash? 방금 실행하려고하면 쉘과 같은 명령이 없다고 불평합니다. 실제로, 당신이 의미하는 것은 $ SHELL 일 것입니다. 사용자 지정 쉘을 실행해야합니다.
이브라힘


0

( ServerFault 의 동일한 질문에서 교차 게시 됨 )

스크립트를 작성하여 원하는대로 수행 한 다음 필요에 따라 /etc/profile또는 가능할 수도 /etc/bash.bashrc있습니다. 해당 파일에 대한 변경 사항은 모든 사용자에게 적용됩니다. 그래도이 방법으로 로그 아웃을 알리는 방법을 잘 모르겠습니다.

또는이 작업을 수행하는 또 다른 방법 /var/log/auth은 새로운 ssh 세션에 대한 간단한 데몬 모니터링 을 하는 것 입니다. 그렇게하면 로그인과 로그 아웃 모두에 알림을 보낼 수 있습니다.


0

sshrc (man sshd, sshrc 검색)를 사용할 수 있습니다

ssh는 / etc / ssh / sshrc가있는 경우이를 실행하며 여기에서 하나의 스크립트를 실행하거나 여러 스크립트를 호출 할 수 있습니다.

bash 변수를 호출 $USER하거나 IP를 통해 얻을 수 있습니다.

read -d " " ip <<< $SSH_CONNECTION

원하는 것을 테스트하거나 기록하는 스크립트를 작성할 수 있습니다.

로그 아웃 스크립트 ... 글쎄, 내가 찾는 것입니다! :디


0

PAM 이 최선의 선택 이라고 생각 합니다. 시스템 전체에 있으며 사용자의 구성 파일로 대체 할 수 없습니다.

이 단계를 수행 할 수 있습니다. 그들은 Ubuntu 14.04.4 LTS에서 나를 위해 일했습니다.

운영:

$ sudo pico /opt/custom/bin/info-session.sh

빈 파일을 편집하고 다음 줄을 추가하십시오.

#!/bin/sh

[ "$PAM_TYPE" = "open_session" ] || exit 0

INFO=$(date +"%Y/%m/%d %T $PAM_USER ($PAM_RHOST) $PAM_SERVICE $PAM_TTY") # You can customize message.

echo "PAM access: $INFO" | write user > /dev/null 2>&1 # See Note 1.

exit 0

그런 다음 스크립트에 실행 권한을 부여하십시오.

$ sudo chmod ugo+x /opt/custom/bin/info-session.sh

이제 다음을 실행하십시오.

$ sudo pico /etc/pam.d/common-session

파일 끝에 다음 줄을 추가하십시오.

# Modified by user:
session optional pam_exec.so /opt/custom/bin/info-session.sh

서비스를 다시 시작할 필요가 없습니다. 이 스크립트는 사용자가 SSH 대신 터미널에서 로그인 할 때도 실행됩니다.

참고 1 :espeak 필요에 맞는 다른 프로세스 (이메일, 푸시 알림 등)로 파이프 또는 파이프 할 수 있습니다 . 당신이 사용하는 경우 write사용자가 로그인되어, 그 또는 그녀는 직접 터미널에 출력 메시지를 볼 수 있습니다.

참조 :
https://blog.stalkr.net/2010/11/login-notifications-pamexec-scripting.html
https://blog.redbranch.net/2014/06/04/pam_exec-so-execute-commands-on -사용자 로그인 /

관련 :
ssh 로그인에 성공했을 때 이메일 경고를 설정하려면 어떻게합니까?
/server/400613/how-can-i-configure-my-server-to-notify-me-whenever-it-is-remotely-accessed-via
/server//questions / 395393 / email-notification-about-each-ssh-connection-to-linux-server에 대한 이메일 알림

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.