누군가 SSH를 통해 Linux 박스에 로그인 할 때마다 프로그램을 실행합니다


10

작은 SSH 서버가 있고 누군가 SSH를 통해 로그인 할 때마다 실행할 스크립트를 작성하고 싶습니다.

이제 어떻게해야합니까?

ANYBODY가 로그인 할 때마다 스크립트를 실행하고 싶습니다. 적어도 로그인 한 사람의 사용자 이름과 그 사람이 로그인 한 IP 주소에 액세스 할 수 있어야합니다.

나는 사용 /etc/bash.bashrc에 대해 생각 했지만 좋은 해결책입니까? 예를 들어, 사용자가 사용을 비활성화하여 스크립트를 비활성화 할 수있는 방법이 있습니까? 그렇다면 다른 옵션은 무엇입니까?

감사.


물론 사용자가 bash를 사용하는 경우에만 작동합니다. 사용자가 자신의 쉘을 선택할 수 있으면 작동하지 않습니다.
Paŭlo Ebermann 2018

답변:


12

사용하는 메커니즘은 목표에 따라 다릅니다.

사용자에게 편리 하고 친근한 것을 제공/etc/profile 하려면 모든 사용자가 동일한 쉘을 사용하는 것으로 충분합니다. 를 통해 로그인 할 때만 명령을 실행하려면에 ssh명령을 넣습니다 /etc/ssh/sshrc. 사용자가 자신의 ~/.ssh/rc파일로 명령을 재정의하지 않아도 됩니다.

당신이 할 경우 강제로 하나 개의 프로그램, 실행하는 사용자를 단 하나 개의 프로그램 , 다음 ForceCommandDigitalRoss에 의해 설명 된대로 옵션을 좋은 방법입니다. (개인적 으로 AppArmor , SELinux , TOMOYO 또는 SMACK 과 같은 필수 액세스 제어 시스템으로 사용자를 제한하여 프로그램이 사용자가 탈출 할 수 없도록합니다. AppArmor에서 10 년 동안 일한 적이 있습니다. 도구를 먼저 선택하지만 다른 도구는 뛰어난 프로그래머가 작성한 훌륭한 도구입니다.)

하나의 프로그램을 실행 하고 사용자를 방해하지 않으 려면 가장 좋은 방법은 pam_exec(8)모듈 을 사용하는 것입니다.이 모듈은 무시할 수 없으며 셸에 관계없이 작동하며 사용자 또는 사용자로 쉽게 실행할 수 있습니다. 인증을 수행하는 프로그램의 계정. 맨 페이지는 다음 예제를 제공합니다.

   Add the following line to /etc/pam.d/passwd to rebuild the
   NIS database after each local password change:

               passwd optional pam_exec.so seteuid make -C /var/yp

   This will execute the command

       make -C /var/yp

   with effective user ID.

이것은에 실행하도록 확장 할 수있는 auth, account, password,과 session행동; 아마도 session로그인 할 때 실행하는 것이 가장 좋습니다. 다음과 같은 줄을 추가하십시오.

session optional pam_exec.so log=/var/log/ssh_login_cmd /usr/local/bin/ssh_cmd

당신에 대한 /etc/pam.d/sshd제어 파일.


외모는 같은 pam_exec모듈이 내가 찾고 정확히입니다. 감사!
houbysoft 2016 년

2
실행 명령이 0이 아닌 종료 코드로 종료하면 로그인이 실패하고 잠길 수 있습니다. 이를 해결하는 한 가지 방법은 항상 성공하는 다른 모듈로 호출되는 다른 '세션 옵션'이 있는지 확인하는 것입니다.
gflarity

4

최신 버전의 OpenSSH에는 ForceCommand 라는 서버 기능 이있어 사용자가 의도 한 작업 (scp, ssh, ...) 대신 스크립트를 제어 할 수 있습니다. 이 스크립트에는 원래 명령이 전달되었으므로 필요한 작업을 수행 한 후에 연결할 수 있습니다.

sshd_config (5)에서 :

ForceCommand

클라이언트가 제공 한 명령을 무시하고 ~ / .ssh / rc가 있으면 ForceCommand에서 지정한 명령을 강제로 실행합니다. 명령은 -c 옵션과 함께 사용자의 로그인 쉘을 사용하여 호출됩니다. 이것은 쉘, 명령 또는 서브 시스템 실행에 적용됩니다. Match 블록 내에서 가장 유용합니다. 클라이언트가 원래 제공 한 명령은 SSH_ORIGINAL_COMMAND 환경 변수에서 사용할 수 있습니다. ``internal-sftp ''명령을 지정하면 ChrootDirectory와 함께 사용될 때 지원 파일이 필요없는 프로세스 내 sftp 서버를 강제로 사용합니다.

나는 이것을 사용하여 scp를 재정의하고 모든 사용자에게 필요하지 않거나 원치 않는 보석 대화 형 액세스를 업로드 할 수있는 권한을 부여하지 않고 안전한 보석 업로드를 제공했습니다.


3

한 가지 방법은 syslog-ng 를 syslog 데몬으로 사용하고 특정 로그 항목 (예 : 성공적인 ssh 로그인)이 일치 할 때마다 스크립트 백그라운드를 실행하도록 구성하는 것입니다.


0

이것 좀 봐:

http://ubuntuforums.org/showthread.php?p=9383927

나는 이것을 실행하지 못하게하는 방법이 없다고 생각합니다. 다른 사람이 이것을 확인할 수 있습니까?


그것은 ( /etc/profile또는 ~/.profile) 사용자의 쉘에 따라 다르며, 조금 작습니다 bashrc. 사용자가 bash 또는 이와 유사한 것을 사용하는 경우 괜찮습니다.
Paŭlo Ebermann 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.