x 세션이없는 그놈 키링 사용법


14

저의 사용 사례는 소프트웨어 개발이 수행되는 헤드리스 서버가 있다는 것입니다. SSH 연결을 위해 X11 전달을 일반적으로 사용하도록 설정했지만 연결 속도가 느린 원격 위치에서는 사용할 수 없습니다.
나는 정기적으로 나무에서 18-20 개의 저장소를 사용하기 때문에 git 자격 증명을 안전하게 저장하고 캐싱해야하므로 libgitme-keyring을 사용하여 통신하는 git credential.helper로 git-credential-gnome-keyring을 사용하고 있습니다. 그놈 열쇠 고리 데몬에게. 솔루션을 테스트하기 위해 모니터로 PC를 설정하고 시스템에서 기본적으로 키 링이 작동하는지 확인한 다음 SSH로 시도했습니다. X11 포워딩에서는 작동하지만 그것 없이는 작동하지 않습니다.

X11 전달없이 연결되면 키링을 쿼리 할 때 다음 오류가 발생하고 도구가 명령 행에서 프롬프트로 돌아갑니다.

** (process:18305): CRITICAL **: Error communicating with gnome-keyring-daemon

조사에 따르면 기본 문제는 gnome-keyring-daemon이 dbus를 사용하여 대화하기를 기대하고 있다는 것입니다. X11 세션이 없으면 dbus가 시작되지 않으므로 gnome-keyring-daemon 및 libgnome-keyring에 연결할 일반적인 dbus 버스가 없습니다.

다른 사람 이이 문제에 대해 게시 한 두 가지 해결책을 찾았지만 제대로 작동하지는 않습니다.

  1. X11을 사용하는 기존 세션에서 DBUS 포트 가져 오기
  2. 새로운 DBUS 포트를 수동으로 시작

기존 DBUS 포트에 연결할 때 기본 개념은 기존 로그인 세션의 PID를 찾고 procfs에서 해당 PID에 대한 환경을 덤프하고 검색 DBUS_SESSION_BUS_ADDRESS하여 현재 환경으로 내보내는 것입니다. 이는 세션의 모든 항목에서 사용하는 DBUS 버스를 게시하는 데 사용되는 변수이므로 세션을 설정하면 세션의 모든 항목이 공통 DBUS 버스와 통신 할 수 있어야하지만 다른 세션과 연관된 버스입니다.
여기에 출처 :
https://ubuntuforums.org/showthread.php?t=1059023

https://ask.fedoraproject.org/en/question/45246/error-communicating-with-gnome-keyring-daemon-in-ssh-

ssh 로그인시 실행중인 .bashrc에 세션 / 코드가 추가되었습니다.

if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] ; then
    local myPID=`pgrep "(.*session|fluxbox)" | head -n1`
    if [ -n "$myPID" ] ; then
        local myVar=`cat /proc/${myPID}/environ | grep -z "^DBUS_SESSION_BUS_ADDRESS=" | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
        if [ -n "$myVar" ] ; then
            export DBUS_SESSION_BUS_ADDRESS=$myVar
        fi
    fi
fi

두 번째 방법은 세션에 대해 DBUS를 수동으로 시작하는 방법으로 dbus-launch새 세션을 작성 DBUS_SESSION_BUS_ADDRESS하고 환경을 설정 한 다음 필요한 모든 서비스로 gnome-keyring-deemon을 시작하여 생성 한 DBUS 버스 주소를 확인할 수 있습니다. 빈 버스 주소가 아니라 이 솔루션은 시스템 당 하나의 인스턴스가 아닌 세션 당 하나의 인스턴스를 실행하도록 gnome-keyring-daemon을 변경하거나 요구하지 않을 수 있지만 명확하지는 않습니다.
출처 :
8 번으로 시작 : https://support.wandisco.com/index.php?/Knowledgebase/Article/View/362/17/how-to-setup-encrypted-svn-password-storage-using-gnome- keyring-in-an-ssh-session

업그레이드시 변경 사항을 잃지 않고 dbus 서비스의 "Exec"라인을 수정하는 방법
ssh 로그인시 실행중인 .bashrc에 추가 된 코드 :

# then DBUS wasn't started for this session and needs to be
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] ; then
    # start a new dbus session and make sure the variables are exported (automatic output)
    eval `dbus-launch --sh-syntax`

    # make sure gnome-keyring-daemon is using all the necessary components (it may not be by default)
    # Capture the output, which is a series of variable setting commands, one on eachline, and
    # export them while setting them
    while read -r LINE
    do
        export $LINE
    done <<< $(gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh)
fi

두 솔루션 모두 동일한 실패 결과를 제공합니다. gnome-keyring-deemon과 통신 할 수 없음을 나타내는 오류를 즉시 생성하는 대신 프로세스가 잠시 중단 된 후 다음 출력을 생성합니다.

Gkr-Message: secret service operation failed: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.

** (process:31155): CRITICAL **: Error communicating with gnome-keyring-daemon

gnome-keyring-daemon이 DBUS와 어떻게 상호 작용하는지는 확실하지 않지만 새로 생성 된 DBUS 버스를 통해 도달하거나 다른 DBUS 버스에서 크로스 프로세스를 수행 할 수 없다는 두 번째 오류 결과에서 명확합니다. 내가 찾은 것 중 일부는 gnome-keyring-daemon이 DBUS를 시작하기 전에 필요할 수도 있지만 사용법 (libgnome-keyring)인지 데몬인지는 확실하지 않습니다.

이 작업을 어떻게 수행합니까?


실제로
xbus

첫 번째 접근 방식에서 알 수 있듯이 키 링 데몬이 시작되기 전에 dbus 세션을 시작했습니다. 그리고 원격 시스템에서 gnome-key-ring 데몬을 사용하는 명령을 실행할 때 $ DISPLAY 소켓을 통해 소스 시스템으로 다시 연결하여 dbus 세션에 연결하고 있습니까? 그럴 가능성은 거의 없지만, 완전히 동의하지 않을 정도는 모르겠습니다. Dbus는 그래픽 도구가 아니며 그래픽 응용 프로그램에서 많이 사용되는 프로세스 간 통신 도구입니다.
mtalexan

여기서 스핏볼 링을했지만 xvfb를 사용하여 xsession을 "가짜로"시도했습니다. dbus에서 Xserver가 실행되고 있음을 알 수 있도록 DISPLAY var를 실행 (및 초기화 완료)하고 내 보내면 작동 할 수 있습니다.
TAAPSogeking

답변:


1

이것은 어리석은 대답 일 수 있습니다 ...하지만 그놈 키 링 은 최소한 마스터 키를 요구 하기 위해 X11 세션에 액세스 해야 합니다. 따라서 설계에 따라 실행하는 것은 불가능합니다. 그렇지 않습니까?

편집 : 어쩌면 그렇게 불가능 하지는 않습니다 . 이 게시물 을보고 문제와 비슷하게 보입니다.

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