ssh-agent가 나중에 사용하기 위해 암호화되지 않은 키를 저장하지 않는 이유는 무엇입니까?


12

헤드리스 Ubuntu 서버에서 다른 서버로 SSH를 연결할 때마다 키 파일의 비밀번호를 묻습니다. 이전에 서버에 연결 한 경우에도

왜 이런지 아십니까? ssh-agent현재 실행 중이 아닌 단순한 것일 수도 있습니다 .

내 Ubuntu Gnome 데스크탑의 동일한 키가 정상적으로 작동합니다. 서버와 데스크탑 모두 Ubuntu 10.10을 실행 중입니다.

ps -ef | grep '[s]sh-agent'
simon     3219     1  0 12:46 ?        00:00:00 ssh-agent

1
먼저 말했듯 ssh-agent이 실행 중인지 확인하십시오 .ps -ef | grep '[s]sh-agent'
Scott Severance

@mssever 그렇습니다. 업데이트 된 질문을 참조하십시오.
Treffynnon

답변:


10

에이전트가 작동하더라도 특정 환경 변수가 설정되지 않은 경우 에이전트에 대한 참조가 없습니다. 더욱이 에이전트, 변수가 모두 괜찮더라도 ID는 에이전트에게 자동으로 전송되지 않습니다 ssh-askpass. 이는 X 세션에서만 작동 하는 작업입니다 .

bash를 사용하는 경우 ~/.bash_profile다음 내용으로 파일 을 작성하십시오 .

# File: ~/.bash_profile

# source ~/.profile, if available
if [[ -r ~/.profile ]]; then
  . ~/.profile
fi

# start agent and set environment variables, if needed
agent_started=0
if ! env | grep -q SSH_AGENT_PID >/dev/null; then
  echo "Starting ssh agent"
  eval $(ssh-agent -s)
  agent_started=1
fi

# ssh become a function, adding identity to agent when needed
ssh() {
  if ! ssh-add -l >/dev/null 2>&-; then
    ssh-add ~/.ssh/id_dsa
  fi
  /usr/bin/ssh "$@"
}
export -f ssh

# another example: git
git() {
  if ! ssh-add -l >/dev/null 2>&-; then
    ssh-add ~/.ssh/id_dsa
  fi
  /usr/bin/git "$@"
}
export -f git

~/.ssh/id_dsa필요에 따라 파일 이름을 수정 하고이 줄을~/.bash_logout

# stuff to add at end of ~/.bash_logout
if ((agent_started)); then
  echo "Killing ssh agent"
  ssh-agent -k
fi

마지막 참고 사항 :이 경우 그놈 세션을 방해하지 않습니다.이 경우에만 ~/.profile소스가 제공 되므로 ssh-askpass암호 문구를 요청하여로 전송 하는 그래픽 인터페이스의 이점을 얻을 수 있습니다 ssh-agent.


@enzotib 덕분 ssh에 다른 기계에 잘 어울립니다 . 그러나 git공용 저장소를 밀거나 당기는 데 사용하지는 않습니다 . 내가 어떻게 해결할 수 있는지 아이디어가 있습니까?
Treffynnon

와 동일한 함수를 추가하고 ssh()호출하여 git()마지막 줄을에서 /usr/bin/ssh로 변경하십시오 /usr/bin/git. 또한로 마지막 줄을 추가하십시오 export -f git.
enzotib

@enzotib 나는 그것을 시도했지만, 지금 당신이 위에서 만든 파일로 ssh컴퓨터에 들어가면 bash_profile키의 암호를 묻습니다. 어떤 이유로 지금은 거기에 ssh를 할 때마다 내가 실행 한 경우에도 전에 요청 ssh또는 git. 문제가있는 시스템에 로그인 할 때 나타나는 프롬프트에 대해서는 gist.github.com/942082 를 참조하십시오 .
Treffynnon

@Treffynnon : 나는와 어떻게 git상호 작용 하는지 정확히 알지 못하며 시도 ssh하지 못하도록 사용하지 않습니다 git. 이전에 설명한 내용이 명확하도록 위에서 언급 한 기능 ~/.bash_profile을 포함 하도록를 수정했습니다 git(). 또한 서버 시스템을 수정했음을 보여주는 출력에서 ​​보이지만 모든 조언은 클라이언트 시스템으로 만 전달되었습니다.
enzotib

@enzotib 맞습니다. git중앙 단조 / 저장소로 푸시 할 때 파일이 올바른 위치에있게 되면 로그인 한 서버가 클라이언트가됩니다 . 나는 당신이 나에게 힌트를 주었고 내 생각을 조깅했다고 생각합니다. 의 git 분기를 표시하는 특수 bash 프롬프트가 pwd있습니다. 그것이 bash 프롬프트를 렌더링하기 전에 stat git을 시도 할 때 bash 로그인시 암호 요청을 트리거하는 것입니다!
Treffynnon

2

최근에 ssh-ident를 사용하기 시작했습니다.

https://github.com/ccontavalli/ssh-ident

당신이해야 할 일은 다음과 같은 것을 추가하는 것입니다.

alias ssh="/path/to/ssh-ident"

당신의 .bashrc. 양자 택일로, 당신은 할 수 ln -s /path/to/ssh-ident ~/bin/ssh또는 전에 PATH에서 다른 디렉토리 /bin/usr/bin.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.