내 ssh-agent를 시작하는 사람은 누구이며 올바르게 종료되지 않는 이유는 무엇입니까?

내 ssh-agent를 시작하는 사람은 누구이며 올바르게 종료되지 않는 이유는 무엇입니까?

이것은 제가 오랫동안 안고 있던 문제인데, 뭔가 알아내려고 할 때마다 헤매기 때문에 여기에 물어보면 더 경험이 많은 분이 도와주실 수 있을 거라 생각했습니다.

배경

내 Raspberry Pi는 Raspbian Jessie를 실행하고 있으며 SSH를 사용하여 원격으로 로그인하고 명령을 실행하는 경우가 많습니다. 첫 번째 SSH 세션에서 ssh-agent프로세스가 생성되는 것을 발견했습니다.라즈베리 파이에서로그인할 때마다, 하지만 절대로 실행되지 않습니다 exit. 로그인 및 종료 시 해당 프로세스가 종료되어 많은 ssh-agent프로세스가 생성되고 아무 작업도 수행하지 않습니다. 맨 페이지와 답변을 뒤적거리다가 최근에 의 목적에 대해 알게 되었고 ssh-agent일반적으로 로그아웃 시 종료되어야 한다는 것도 알게 되었기 때문에 왜 안되는지 자문하기 시작했습니다. 또한 발행으로 인해 source ~/.bashrc다른 인스턴스가 생성되는 것으로 나타났습니다. ssh-agent나는 계속해서 읽는다관련 매뉴얼 페이지SSH_AGENT_PIDssh-agent환경 변수는 프로그램이 실행 파일 내에서 실행되어 eval출력을 실행하고 ssh-agent -k(현재 세션을 기준으로 에이전트 종료)을 포함하여 다른 SSH 관련 명령에서 사용되는 변수를 정의 해야 하기 때문에 정의되어야 하므로 실행 echo $SSH_AGENT_PID했지만 echo $SSH_AUTH_SOCK둘 다 비어 있습니다. 그것은 나에게 일어났습니다: 어쩌면 프로세스가 ssh-agent -k설정되지 않은 환경 변수에서 PID를 읽으려고 하기 때문에 로그아웃 시 프로세스가 종료되지 않을 수도 있습니다.

질문

로그아웃 시 사용자가 죽지 않고 ssh-agent필수 환경 변수가 설정되지 않았기 때문에 이런 일이 발생하는 것은 확실하므로 이는 한 가지만 의미할 수 있습니다.로그인을 호출하는 사람이 ssh-agent아마도 올바른 방식으로 로그인을 수행하고 있지 않을 것입니다 eval "$(ssh-agent -s)".. 그래서 저는 이렇게 생각했습니다. 그래, 문제가 뭐지? 에이전트를 시작하고 수동으로 수정하기 위해 실행된 구성 파일, 서비스 또는 로그인 스크립트를 찾습니다.어디에 있을까요?

내가 시도한 것

ssh-agent이것은 내가 호출할 때마다 가 생성된다는 것을 알고 나서 처음으로 확인한 파일이었지만 source ~/.bashrc그 안에는 SSH와 관련된 어떤 것도 원격으로 참조하는 내용이 없었습니다.다음 모든 파일에서 이 문자열을 검색했지만 vi아무것도 찾지 못했습니다.ssh:

~/.bashrc
~/.profile
/etc/bash.bashrc
/etc/profile
/etc/profile.d/ (every file in this folder)
/etc/environment

관련될 수 있는 다른 파일이 있습니까 source ~/.bashrc? 나는 정말로 모른다.

그 다음에systemd관련 서비스를 검색해 봤습니다ssh.service, 그러나 , 즉 만 발견되므로 WantedBy=multi-user.target로그인 시 실행되지 않습니다(이것은 SSH 서버 데몬이므로 분명합니다).

나도폴더의 모든 파일을 /home/pi임시 폴더로 이동해 보세요.로그 아웃했다가 다시 로그인했지만 ssh-agent여전히 생성되었습니다.

마지막으로 비밀 방에서도 마지막 공격을 가했습니다. find / -name 'ssh-agent'루트로 실행하고 /usr/bin/ssh-agent실행 파일인 을 인쇄했습니다.기본적으로 상위 명령만 기록하는 가짜 실행 파일을 만들었습니다.:

#! /bin/bash
ps -o args= $PPID        > /home/pi/LOG
cat /proc/$PPID/cmdline >> /home/pi/LOG

실제 이름을 바꾸고 /usr/bin/ssh-agent올바른 권한/사용자/그룹을 설정하는 가짜 이름으로 바꾸고 source ~/.bashrc다시 실행한 다음 LOG파일을 인쇄했습니다.

-bash
-bash

무슨 일이 일어나고 있는지 전혀 알 수 없었습니다.

자세한 내용은

자세한 내용을 추가하고 있습니다. 도움이 될지는 모르겠지만... 후회하는 것보다 안전한 것이 더 좋습니다.

  • 이 내 꺼야.bashrc.

  • dummyusing이라는 새 사용자를 생성했는데 useradd -m dummy로그인해도 아무것도 시작되지 않습니다.ssh-agent(이게 뭔가 의미가 있을 것 같은 느낌이 듭니다). .diff /home/pi/.bashrc /home/dummy/.bashrcdiff /home/pi/.profile /home/dummy/.profile

  • SSH_AUTH_SOCK설정되지 않은 경우에도 프록시 소켓은 문제 없이 생성됩니다.

    pi:~$ ls -lAh /tmp/ssh-vQRTAyj7DJry/
    total 0
    srw------- 1 pi pi 0 Jan 28 03:12 agent.1328
    

    이유는 확실하지 않지만 소켓 파일 이름의 숫자는 항상 프로세스 PID 바로 앞의 숫자입니다 ssh-agent.

  • 다음의 스니펫 htop:

     PID  USER  PRI  NI  VIRT   RES   SHR  S  Command
       1  root   20   0  5472  3900  2728  S  /sbin/init
    1329  pi     20   0  3696   224    16  S  └─ ssh-agent -s
    
  • 설치된 패키지는 다음과 일치합니다 ssh.

    pi:~$ apt list --installed | grep ssh
    libpam-chksshpwd/oldstable,now 1.1.8-3.1+deb8u2+rpi3 armhf [installed]
    libssh-gcrypt-4/oldstable,now 0.6.3-4+deb8u2 armhf [installed,automatic]
    libssh2-1/oldstable,now 1.4.3-4.1+deb8u1 armhf [installed,automatic]
    openssh-client/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    openssh-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    openssh-sftp-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    ssh/oldstable,now 1:6.7p1-5+deb8u4 all [installed]
    sshpass/oldstable,now 1.05-1 armhf [installed]
    
  • in을 사용하여 재귀적으로 검색하면 ssh-agent -s결과가 생성되지 않습니다.grep/etc/lib

  • 데스크톱 환경이 설치되어 있지 않지만 /etc/X11일부 구성 파일이 포함된 폴더가 있습니다. 만일을 대비해 폴더 이름을 다른 이름으로 변경하고 다시 시작해 보았으나 여전히 프로세스가 생성되므로확실히이것은 이것과 거의 관련이 없습니다.


결론적으로

이제 최대한 간단하게 설명하기 위해 두 가지 질문만 드리겠습니다.

  1. 어디서, 어떻게 이런 일이 ssh-agent일어났으며, 누가 명령을 내렸습니까?
  2. 필요한 환경 변수를 설정하지 않고 올바른 방식으로 호출하여 프로세스를 무기한 정지시키면 어떨까요?

답변1

저는 다음과 같은 몇 가지 이유가 있을 수 있다는 것을 알고 있습니다.

  • 이를 사용하면 libpam-ssh세션 시작 중에 자동으로 SSH 에이전트를 시작할 수 있으며, 비밀번호가 없거나 비밀번호가 로그인 비밀번호와 동일한 경우 키를 자동 로드할 수도 있습니다.

  • 이를 사용하는 경우 gpg-agent수행할 작업을 선택할 수도 있습니다 ssh-agent. 종료는 다르게 처리되므로 SSH_AUTH_SOCK대신 환경 변수 만 있습니다 .SSH_AGENT_PID

  • 워크스테이션에서 SSH 에이전트(예: PuTTY's Pageant)를 실행하고 에이전트 전달이 활성화된 상태에서 SSH 연결을 설정하는 경우(그리고 원격에서 이를 허용하는 경우) 원격 호스트에서는 에이전트가 어느 것을 설정하는지를 설정하기 때문에 다시 no ... sshd만 표시됩니다. 인터페이스가 터널을 통과하면 이를 로컬 워크스테이션의 SSH 에이전트로 반환합니다.SSH_AUTH_SOCKSSH_AGENT_PIDsshd

답변2

이것은 오래된 질문입니다. 그러나 SSH_AUTH_SOCK어떤 환경 변수가 설정되어 있는지 알아보기 위해 여기에 오신 경우언급된 다른 모든 장소를 제외하고, 그렇다면 대답은 입니다 sshd.

sshdSSH_AUTH_SOCK이는 프록시 전달을 활성화하면 AllowAgentForwarding yes설정됩니다 /etc/sshd_config(기본적으로 활성화됨).

SSH_AUTH_SOCK경로가 변경된 것으로 나타나므로 다른 경로를 사용하도록 sshd를 구성할 수 없습니다.하드코드.

SSH_AUTH_SOCK프록시 전달이 비활성화된 경우 설정되지 않습니다.

man sshd_config:

사용자가 언제든지 자체 전달자를 설치할 수 있으므로 프록시 전달을 비활성화해도 사용자의 셸 액세스가 거부되지 않는 한 보안이 향상되지 않습니다.

관련 정보