이것은 제가 오랫동안 안고 있던 문제인데, 뭔가 알아내려고 할 때마다 헤매기 때문에 여기에 물어보면 더 경험이 많은 분이 도와주실 수 있을 거라 생각했습니다.
배경
내 Raspberry Pi는 Raspbian Jessie를 실행하고 있으며 SSH를 사용하여 원격으로 로그인하고 명령을 실행하는 경우가 많습니다. 첫 번째 SSH 세션에서 ssh-agent
프로세스가 생성되는 것을 발견했습니다.라즈베리 파이에서로그인할 때마다, 하지만 절대로 실행되지 않습니다 exit
. 로그인 및 종료 시 해당 프로세스가 종료되어 많은 ssh-agent
프로세스가 생성되고 아무 작업도 수행하지 않습니다. 맨 페이지와 답변을 뒤적거리다가 최근에 의 목적에 대해 알게 되었고 ssh-agent
일반적으로 로그아웃 시 종료되어야 한다는 것도 알게 되었기 때문에 왜 안되는지 자문하기 시작했습니다. 또한 발행으로 인해 source ~/.bashrc
다른 인스턴스가 생성되는 것으로 나타났습니다. ssh-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와 관련된 어떤 것도 원격으로 참조하는 내용이 없었습니다.다음 모든 파일에서 이 문자열을 검색했지만 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
.dummy
using이라는 새 사용자를 생성했는데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
이유는 확실하지 않지만 소켓 파일 이름의 숫자는 항상 프로세스 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
일부 구성 파일이 포함된 폴더가 있습니다. 만일을 대비해 폴더 이름을 다른 이름으로 변경하고 다시 시작해 보았으나 여전히 프로세스가 생성되므로확실히이것은 이것과 거의 관련이 없습니다.
결론적으로
이제 최대한 간단하게 설명하기 위해 두 가지 질문만 드리겠습니다.
- 어디서, 어떻게 이런 일이
ssh-agent
일어났으며, 누가 명령을 내렸습니까? - 필요한 환경 변수를 설정하지 않고 올바른 방식으로 호출하여 프로세스를 무기한 정지시키면 어떨까요?
답변1
저는 다음과 같은 몇 가지 이유가 있을 수 있다는 것을 알고 있습니다.
이를 사용하면
libpam-ssh
세션 시작 중에 자동으로 SSH 에이전트를 시작할 수 있으며, 비밀번호가 없거나 비밀번호가 로그인 비밀번호와 동일한 경우 키를 자동 로드할 수도 있습니다.이를 사용하는 경우
gpg-agent
수행할 작업을 선택할 수도 있습니다ssh-agent
. 종료는 다르게 처리되므로SSH_AUTH_SOCK
대신 환경 변수 만 있습니다 .SSH_AGENT_PID
워크스테이션에서 SSH 에이전트(예: PuTTY's Pageant)를 실행하고 에이전트 전달이 활성화된 상태에서 SSH 연결을 설정하는 경우(그리고 원격에서 이를 허용하는 경우) 원격 호스트에서는 에이전트가 어느 것을 설정하는지를 설정하기 때문에 다시 no ...
sshd
만 표시됩니다. 인터페이스가 터널을 통과하면 이를 로컬 워크스테이션의 SSH 에이전트로 반환합니다.SSH_AUTH_SOCK
SSH_AGENT_PID
sshd
답변2
이것은 오래된 질문입니다. 그러나 SSH_AUTH_SOCK
어떤 환경 변수가 설정되어 있는지 알아보기 위해 여기에 오신 경우언급된 다른 모든 장소를 제외하고, 그렇다면 대답은 입니다 sshd
.
sshd
SSH_AUTH_SOCK
이는 프록시 전달을 활성화하면 AllowAgentForwarding yes
설정됩니다 /etc/sshd_config
(기본적으로 활성화됨).
SSH_AUTH_SOCK
경로가 변경된 것으로 나타나므로 다른 경로를 사용하도록 sshd를 구성할 수 없습니다.하드코드.
SSH_AUTH_SOCK
프록시 전달이 비활성화된 경우 설정되지 않습니다.
man sshd_config
:
사용자가 언제든지 자체 전달자를 설치할 수 있으므로 프록시 전달을 비활성화해도 사용자의 셸 액세스가 거부되지 않는 한 보안이 향상되지 않습니다.