누가 내 ssh-agent를 시작합니까? 왜 제대로 종료되지 않습니까?


9

이것은 내가 오랫동안 겪고 있었던 문제이지만, 내가 잃어버린 것을 알아 내려고 할 때마다 더 많은 경험이있는 누군가가 나를 도울 수있는 곳에서 더 잘 물어볼 수있을 것이라고 생각했습니다.

배경

내 Raspberry Pi는 Raspbian Jessie를 실행 중이며 SSH를 사용하여 자주 로그인하고 명령을 원격으로 실행합니다. 첫 번째 SSH 세션 중에는 로그인 할 때마다 RPi에ssh-agent 프로세스가 생성 되었지만 로그인 할 때 죽지 않았다는 것을 알았 습니다. 여러 번 로그인 및 로그 아웃하면 아무 것도하지 않고 여러 프로세스가 생성됩니다. 나는 여기저기서 매뉴얼 페이지와 답변을 읽고 읽으면서 최근의 목적을 이해했으며 로그 아웃 할 때 정상적으로 죽어야한다는 것을 알았으므로 왜 그렇지 않은지 스스로에게 묻기 시작했습니다. 또한 발행으로 인해 다른 인스턴스 가 생성되는 것으로 나타났습니다. 상대 매뉴얼 페이지를 읽었습니다.exitssh-agentssh-agentsource ~/.bashrcssh-agent프로그램이 출력을 실행하고 변수 SSH_AGENT_PID를 정의하기 위해 ssh-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와 관련된 것을 원격으로 참조 한 것은 없습니다. 다음 파일 모두에서 문자열을 계속 사용 했지만 아무것도 찾지 못했습니다vissh .

~/.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입니다.

  • dummy사용하여 이름이 지정된 새 사용자를 만들었고 useradd -m dummy로그인해도 시작되지 않습니다ssh-agent (이것이 뭔가 의미가 있다고 생각합니다). diff /home/pi/.bashrc /home/dummy/.bashrc에 대한 동일 쇼 기본적으로 아무것도 (내가 만든 단지 주석) diff /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
    

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

  • 니펫 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]
    
  • 검색 ssh-agent -s재귀 적 사용 grep/etc/lib어떤 결과를 얻을 수 있습니다.

  • 데스크탑 환경이 설치되어 있지 않지만 /etc/X11구성 파일 이 포함 된 폴더가 있습니다. 폴더의 이름을 바꾸고 다른 경우로 재부팅하려고 시도했지만 프로세스가 여전히 생성되므로 분명히 그와 관련이 없습니다.


결론

이제 가능한 한 간단하게하기 위해 두 가지 질문 만 있습니다.

  1. 이것은 어디에서 어떻게 ssh-agent생성되며 누가 명령을 내립니까?
  2. 필요한 환경 변수를 설정하지 않고 프로세스를 무기한 중단하지 않고 올바른 방식으로 호출되지 않는 이유는 무엇입니까?

~/.bashrc그때 당신이 무엇을 가지고 있는지 궁금합니다 .
ilkkachu

답변:


1

몇 가지 가능한 이유를 알고 있습니다.

  • 를 사용하는 경우 libpam-ssh세션 시작의 일부로 SSH 에이전트를 자동으로 시작하고 암호가 없거나 암호가 로그인 암호와 동일한 경우 키를 자동으로로드 할 수도 있습니다.

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

  • 워크 스테이션에서 SSH 에이전트 (예 : PuTTY 's Pageant)를 실행 중이고 에이전트 전달이 활성화 된 (및 원격이 sshd허용하는) SSH 연결을 설정 한 경우 원격 호스트 에서 에이전트 소켓 SSH_AUTH_SOCK없이 다시 볼 수 있습니다. SSH_AGENT_PID로 이동 sshd로컬 워크 스테이션의 SSH 에이전트로 다시 터널있다.


1
제안 해 주셔서 감사하지만 불행히도 이러한 옵션 중 어느 것도 나에게 적용되지 않습니다. 나는 없다 libpam-ssh; 둘 다 설정 SSH_AGENT_PID되어 SSH_AUTH_SOCK있지 않습니다 (소켓은 물론 존재합니다). 내가 사용하지 않는 gpg-agent및 에이전트 전달 퍼티에서 사용할 수 없습니다. 나는 정말로 길을 잃었다 : \
Marco Bonelli
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.