저의 사용 사례는 소프트웨어 개발이 수행되는 헤드리스 서버가 있다는 것입니다. 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 버스가 없습니다.
다른 사람 이이 문제에 대해 게시 한 두 가지 해결책을 찾았지만 제대로 작동하지는 않습니다.
- X11을 사용하는 기존 세션에서 DBUS 포트 가져 오기
- 새로운 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)인지 데몬인지는 확실하지 않습니다.
이 작업을 어떻게 수행합니까?