누군가 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.