저는 macOS 노트북과 연중무휴로 실행되는 서버에 ssh-agent를 설정했습니다. 로그아웃할 때마다 ssh-agent를 종료해야 하는 이유는 무엇입니까?
ssh-agent에 대한 나의 지식의 출처:https://kb.iu.edu/d/aeww
eval `ssh-agent` # Start ssh-agent
echo $SSH_AGENT_PID # 20552 (Check ssh-agent is running)
ssh-add # Add id_rsa key to ssh-agent
kill $SSH_AGENT_PID # Kill ssh-agent on logout
이 마지막 단계가 필요한 이유는 무엇입니까?
ssh-agent
프로세스를 종료하는 방법
실행 중인 모든 shh-agent 프로세스를 찾는 가장 쉬운 방법
ps ax | grep ssh-agent # outputs details of processes
또는
pgrep ssh-agent # outputs list of PIDs only
실행 중인 모든 ssh-agent 프로세스를 종료하는 가장 쉬운 방법
pkill ssh-agent
답변1
에이전트를 수동으로 종료하지 않으면 에이전트는 시스템에 남아 있습니다.
일반적으로 어수선한 것 외에도 두 가지 잠재적인 문제가 있습니다.
Kusanalanda가 지적했듯이 이는
ssh-agent
로그인할 때마다 다른 프로세스를 생성하여 프로세스 테이블이 약간 엉성해짐을 의미합니다.더 심각한 것은 모든 프로세스에 귀하의터놓다메모리에 있는 개인 키입니다. 공격자가 시스템에 액세스하여
ssh-agent
커널 메모리 관리 또는 코드 자체의 버그(가설, 현재는 전혀 알지 못함)를 악용하여 잠재적으로 개인 키를 추출하려는 경우.
물론 마지막 가능성은 낮지만 프로세스를 종료하고 위험을 완전히 제거하는 것도 마찬가지로 쉽습니다.
죄송합니다보다 더 안전.
답변2
당신은하지 않습니다가지다도착하다. 그러나 적어도 에이전트 메모리에 잠금 해제된 키가 없고 너무 많은 에이전트를 남겨두지 않는지 확인하고 싶을 것입니다.
이렇게 하려면 다음을 수행할 수 있습니다.
ssh-agent -t 1800
제한된 시간( 30분 제한 시간으로 시작하거나ssh-add -t 1800
키를 추가할 때) 동안만 키를 메모리에 보관하도록 에이전트에 지시합니다.- 로그아웃할 때 에이전트가 모든 키를 삭제하도록 합니다(
ssh-add -D
로그아웃 스크립트에서). - 로그인 시 에이전트가 이미 실행 중인지 확인하고 새 에이전트를 시작하는 대신 해당 에이전트를 사용하세요. 이를 수행하는 한 가지 방법이 있습니다.
# .bashrc
start_ssh_agent() {
if [ -e ~/.agent ]; then
. ~/.agent
fi
ssh-add -l > /dev/null 2>&1
if [ "$?" = "2" ] ; then
# agent not running, start it
ssh-agent -t 3600 |grep -v ^echo > ~/.agent
. ~/.agent
echo "Started SSH agent with PID $SSH_AGENT_PID"
fi
}
start_ssh_agent
물론 다른 방법도 있습니다. 특히 프록시 소켓에 대한 고정 경로를 사용할 수 있습니다. 예를 들어 참조하십시오.모든 터미널에서 ssh-agent를 작동시키는 방법은 무엇입니까?
반면에 누군가가 SSH 에이전트로부터 키를 얻을 수 있다면(즉, 프로세스의 프로그램 메모리를 읽을 수 있다면) 다른 작업도 수행할 수 있을 것입니다. 시간 초과를 비활성화하기 위해 설정을 변경하거나 ssh-add
키와 비밀번호의 복사본을 보내는 수정된 프로그램을 설치하는 등의 작업이 가능합니다 .