사용자가 연결할 때마다(터널링을 위해서라도) SSH 서버에서 명령을 실행하세요.

사용자가 연결할 때마다(터널링을 위해서라도) SSH 서버에서 명령을 실행하세요.

여러 사람이 사용하는 OpenBSD SSH 점프 호스트의 관리자로서 저는 모든 사용자가 SSH를 통해 연결할 때 비록 터널링을 위한 것일지라도 특정 명령을 실행하고 싶습니다.

가능합니까?

ForceCommand사용해 보았지만 /etc/sshrc이는 사용자가 대화형 세션에 있을 때만 작동하는 것 같고 그렇지 않으면 작동하지 않는 것 같습니다.

OpenBSD를 실행하고 있기 때문에 불행히도 PAM 기반의 모든 것은 작동하지 않습니다.이 답변은 Unix 및 Linux에서 작동합니다.

스크립트는 누가 로그인했는지, 어디서 로그인했는지 알려주기 위해 sendmail사용 whoami하고 실행됩니다 .$SSH_CONNECTION

#!/bin/sh

[email protected]

sendmail -F alerts -f $EMAIL root << EOF
Subject: New Login For $1
Message-ID: <$(date +%s)@$(hostname)>
X-Mailer: OpenSMTPD
Content-Type: text/plain

There has been a new login for $1 on $SSH_CONNECTION
EOF

답변1

특정 행이 일치하면 모니터링 /var/log/authlog하고 awk메시지를 보낼 수 있습니다.

tail -f /var/log/authlog | awk '/Accepted pubkey/ { system("mail -s " $0 " [email protected] << EOF\nEOF") }'

물론 /Accepted pubkey/상황에 맞는 다른 패턴으로 교체할 수도 있습니다. MUA를 더 쉽게 읽을 수 있도록 로그 줄 제목이 포함된 빈 이메일을 보내기로 선택했지만 여러분은 다음과 같은 것을 선호할 수도 있습니다.

system("mail -s New\\ Login [email protected] << EOF\n" $0 "\nEOF")

관련 정보