ssh-agent가 설정되지 않음 (SSH_AUTH_SOCK, SSH_AGENT_PID env vars not set) 명령을 실행할 필요가 없습니다.

Kubuntu 12.04에서 친구의 새 사용자 계정을 설정했습니다. 그가 사용할 때 그는 ssh이 오류가 발생합니다 :

인증 에이전트에 대한 연결을 열 수 없습니다

우리는 ssh일부 bash 스크립트에서 실행 중입니다.

이 오류로 이어질 수있는 다양한 것을 살펴본 후이 솔루션을 발견했습니다.

$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa

그런 다음 ssh예상대로 명령 (및 bash 스크립트)을 실행할 수 있습니다 .

이 두 명령을 실행하기 전에 env 변수가 터미널에 설정되어 있지 않습니다.

$ echo $SSH_AGENT_PID

$ echo $SSH_AUTH_SOCK

$ 

명령을 실행 한 후 env 변수가 예상대로 설정됩니다. 그러나 설정이 유지되지 않습니다 (예 : 다른 셸 또는 재부팅 후).

컴퓨터를 설정하는 방법을 알고 싶어서 env 변수를 설정하기 위해이 두 명령을 실행할 필요가 없습니다. 내 컴퓨터에서 실행할 필요가 없습니다. 지금까지 나는 우리 기계 사이에 무엇이 다른지 보지 못했습니다.

맨 페이지 에서이 정보를 볼 수 있지만 우분투가 에이전트를 자동으로 설정하는 방법이나 친구의 컴퓨터에서 발생하는 일을 알려주지 않으므로 이것이 작동하지 않습니다.

에이전트를 설정하는 두 가지 주요 방법이 있습니다. 첫 번째는 에이전트가 일부 환경 변수를 내보내는 새 하위 명령 (예 : ssh-agent xterm &)을 시작하는 것입니다. 두 번째는 에이전트가 호출 쉘에서 제거 될 수있는 필요한 쉘 명령 (sh (1) 또는 csh (1) 구문을 생성 할 수 있음)을 인쇄한다는 것입니다 (예 : ssh-agent -ssh (1)과 같은 Bourne 유형 쉘의 경우 eval 또는 ssh-agent -ccsh (1) 및 파생 상품에 대한 ksh (1) 및 eval .

설치 acct및 재부팅 후 출력은 lastcomm다음 과 같습니다.

ssh-agent         F    newuser __         0.12 secs Wed Aug  7 11:02
ssh-agent         F    newuser __         0.00 secs Wed Aug  7 20:34
ssh-agent         F    newuser __         0.02 secs Wed Aug  7 20:02
ssh-agent         F    newuser __         0.01 secs Thu Aug  8 12:39
ssh-agent         F    newuser __         0.02 secs Thu Aug  8 07:45

매뉴얼 페이지에서 :

F-포크 후에 실행되지만 다음 exec없이 실행되는 명령

그것이 중요한지 잘 모르겠습니다.



답변

ssh로컬로 로그인하지 않고 사용자가 로그인한다고 언급했습니다 . 소위 use-ssh-agent에서 /etc/X11/Xsession.options붉은 청어입니다 : 로컬 X11 GUI 데스크톱에 로그인 (또는 VNC 나 RDP 이상과 같은 몇 가지 가상 X11 세션을 사용하여) 경우에만, SSH 세션에서 실행되지 않습니다.

대신 libpam-ssh어느 시스템에 설치되어 있는지 확인해야 합니다. SSH 개인 키 암호를 사용하여 사용자를 인증하도록 구성 할 수 있지만 선택 사항 ~/.ssh/login-keys.d/이므로 해당 기능 을 위해 키를 구체적으로 배치해야 합니다.

그러나 다른 기능은 모든 로그인 세션에서 SSH 에이전트를 자동 시작하고 비밀번호 문구가 사용자의 로그인 비밀번호와 동일한 경우 에이전트에 SSH 개인 키를 자동으로 추가하는 것입니다. 이것이 시스템간에 다른 행동의 원인 일 수 있다고 생각합니다.


답변

대한

$ eval `ssh-agent -s`

작업에 대한 구조 궁극적으로 “시작 스크립트”, 세션, 그리고 당신이 환경을 기대 터미널을 둘 때, (기준 후손이어야 fork하고 exec해당 스크립트의). 이유는 ssh-agent -s평가시 셸 호출에서eval 환경 변수 설정하기 때문입니다 . 그곳에서 양식을 전달하면 길을 잃을 수도 있습니다.

따라서 ssh-agent로그인 중에 스크립트 A가 어딘가에서 실행하지만 쉘 스크립트를 시작하는 터미널 B 가 A 의 자손아닌 경우 B에서 환경을 볼 수 없습니다.

서비스로 ssh-agent시작한 경우 systemd --user대신 규칙을 사용해야 할 수도 있습니다 ssh-agent
. 변수를 지정 하지 말고 에이전트를 시작할 때와 세션을 시작할 때 일반적인 지식을 사용하십시오. 예를 들어
~/.config/systemd/user/ssh-agent.service다음과 같습니다.

[Unit]
Description=SSH agent

[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK

[Install]
WantedBy=default.target

그리고 내 ~/.profile라인이

export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"

참고 %t로 이전의 대응에를 ${XDG_RUNTIME_DIR}후자이다.

참고 : 이것에 대해 행복하지 않습니다!


답변

나는 여기서 답을 찾았습니다.

http://www.bernatchez.net/userauth.html

우분투에서 ssh-add 유틸리티가 인증서 파일을로드하지 못합니다. 에이전트가 그놈 키링으로 구현 된 에이전트 일 때 발생합니다. 해결 방법은 gnome-keyring의 ssh 구성 요소 사용을 중지하는 것입니다. 초기화 프로세스는 실제로 실제 ssh-agent를 시작한 다음 gnome-keyring-ssh.desktop을 실행하여 AUTH_SOCKET을 클로버로 가져 가서 gnome-keyring-ssh.desktop을 비활성화하여 원래 ssh-agent로 되돌릴 수 있습니다.

gnome-keyring-ssh.desktop을 비활성화합니다 :

cd /etc/xdg/autostart/
sudo emacs gnome-keyring-ssh.desktop

데스크탑 파일에 다음 행을 추가하고 저장 한 다음 재부팅하십시오.

X-GNOME-Autostart-enabled=false

답변

당신은 언급

$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa

원하는대로 작동합니다. 따라서 .bash_profile 또는 .xsession에서 적시에 실행해야합니다. (date; env|sort) >> /tmp/log실행할 때 정확히 이해하는 데 도움이되는 디버그 명령문을 추가하십시오 .