D-Bus 연결을 얻을 수 없습니다: 연결이 거부되었습니다.

D-Bus 연결을 얻을 수 없습니다: 연결이 거부되었습니다.

sudo라는 사용자가 Amazon Linux 2 EC2 이미지를 다시 로드하려고 할 my-host때 다음 오류 메시지를 받았습니다 .systemctl

[my-host@ip-12-3-4-56 ~]$ systemctl --user daemon-reload
Failed to get D-Bus connection: Connection refused

이 오류를 해결하고 제거하려면 정확히 무엇을 해야 합니까?

이 오류 메시지에 대해 제가 찾은 다른 게시물은 apt-get여기에 솔루션이 적용되지 않는 Debian 또는 솔루션이 여기에 적용되지 않는 Docker 이미지에 관한 것입니다.

문제가 사용자 권한과 관련된 경우 문제를 해결하려면 어떤 단계를 수행해야 합니까?

이 컴퓨터에는 systemctl이와 같은 일부 명령이 sudo.

@Stewart 및 @JdeBP가 제안한 대로 사용자를 직접 다시 로그인해 보세요.

그런 다음 외부 세계에서 직접 SSH 기능을 갖춘 sudo 사용자를 사용해 보았지만 여전히 다음과 같은 결과를 얻었습니다.

[ssh-login-user@ip-12-3-4-567 ~]$ systemctl --user daemon-reload
Failed to get D-Bus connection: No such file or directory
[ssh-login-user@ip-12-3-4-567 ~]$ echo $XDG_RUNTIME_DIR $UID
/run/user/1001 1001
[ssh-login-user@ip-12-3-4-567 ~]$ systemctl --user status
Failed to get D-Bus connection: No such file or directory
[ssh-login-user@ip-12-3-4-567 ~]$ sudo install -d -o ssh-login-user /run/user/`id -u ssh-login-user`
[sudo] password for ssh-login-user:
[ssh-login-user@ip-12-3-4-567 ~]$ sudo systemctl start user@`id -u ssh-login-user`
Failed to start [email protected]: Unit not found.
[ssh-login-user@ip-12-3-4-567 ~]$ sudo -u ssh-login-user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/`id -u ssh-login-user`/bus systemctl --user
Failed to get D-Bus connection: No such file or directory

상태를 확인하기 위해 systemctl다음과 같이 다운그레이드된 서비스를 보고하기 위해 다음 작업도 수행했습니다.

● ip-12-3-4-567.aws-region-n.compute.internal
    State: degraded
     Jobs: 0 queued
   Failed: 1 units
    Since: Wed 2020-10-28 23:40:50 UTC; 7min ago
   CGroup: /
           ├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
           ├─user.slice
           │ └─user-1001.slice
           │   └─session-2.scope
           │     ├─18736 sshd: ssh-login-user [priv]
           │     ├─18738 sshd: ssh-login-user@pts/0
           │     ├─18739 -bash
           │     ├─18792 sudo systemctl status
           │     └─18793 systemctl status
           └─system.slice
             ├─rngd.service
             │ └─2692 /sbin/rngd -f
             ├─amazon-ssm-agent.service
             │ ├─3810 /usr/bin/amazon-ssm-agent
             │ └─4428 /usr/bin/ssm-agent-worker
             ├─libstoragemgmt.service
             │ └─2694 /usr/bin/lsmd -d
             ├─systemd-udevd.service
             │ └─1968 /usr/lib/systemd/systemd-udevd
             ├─system-serial\x2dgetty.slice
             │ └─[email protected]
             │   └─3273 /sbin/agetty --keep-baud 115200,38400,9600 ttyS0 vt220
             ├─chronyd.service
             │ └─2685 /usr/sbin/chronyd
             ├─auditd.service
             │ └─2646 /sbin/auditd
             ├─systemd-journald.service
             │ └─1931 /usr/lib/systemd/systemd-journald
             ├─atd.service
             │ └─3239 /usr/sbin/atd -f
             ├─sshd.service
             │ └─3486 /usr/sbin/sshd -D
             ├─crond.service
             │ └─3529 /usr/sbin/crond -n
             ├─gssproxy.service
             │ └─2711 /usr/sbin/gssproxy -D
             ├─rsyslog.service
             │ └─3229 /usr/sbin/rsyslogd -n
             ├─rpcbind.service
             │ └─2683 /sbin/rpcbind -w
             ├─network.service
             │ ├─2919 /sbin/dhclient -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid eth0
             │ └─3034 /sbin/dhclient -6 -nw -lf /var/lib/dhclient/dhclient6--eth0.lease -pf /var/run/dhclient6-eth0.pid eth0
             ├─lvm2-lvmetad.service
             │ └─1953 /usr/sbin/lvmetad -f
             ├─postfix.service
             │ ├─3177 /usr/libexec/postfix/master -w
             │ ├─3178 pickup -l -t unix -u
             │ └─3179 qmgr -l -t unix -u
             ├─acpid.service
             │ └─3456 /usr/sbin/acpid
             ├─dbus.service
             │ └─2681 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
             ├─system-getty.slice
             │ └─[email protected]
             │   └─3274 /sbin/agetty --noclear tty1 linux
             └─systemd-logind.service
               └─2686 /usr/lib/systemd/systemd-logind

이 문제를 해결하기 위해 우리가 또 무엇을 할 수 있나요?

답변: 서비스가 또는 로 실행되는 대신 지정된 사용자로 실행되도록 파일에 사용자를 지정하는 대신 systemctl다음으로 실행하기로 결정했습니다 . 아래 답변으로는 문제가 해결되지 않았기 때문에 이 접근 방식을 선택했습니다.sudo.servicerootsudo

답변1

Stewart는 다른 계정의 명령 사용이 일치하지 않는다는 점에 대해 XDG_RUNTIME_DIR정확합니다 .UIDsu

때때로 사용자 관리자 인스턴스도 사용자에 대해 실행되지 않습니다 UID(예:[이메일 보호됨]).

따라서 다음과 같은 오류 메시지가 나타납니다.

Failed to get D-Bus connection: No such file or directory

다음 사항이 있는지 확인하세요.

ls -l /usr/lib/systemd/system/user{,-runtime-dir}@.service

그렇다면 사용자 관리자 인스턴스를 시작하십시오.사용자UID루트 사용자로서:

systemctl start user@USER_UID.service

그렇지 않으면 더 읽어보세요매뉴얼 [email protected]페이지.

유용한 링크:

답변2

어떻게 로그인하나요 my-host?

와 함께 있으면 생성되지도 않고 업데이트되지도 않는 su것으로 나타났습니다 ./run/user/$UIDXDG_RUNTIME_DIR

user ~ $ echo $XDG_RUNTIME_DIR $UID
/run/user/1000 1000

user ~ $ su my-host

my-host ~ $ echo $XDG_RUNTIME_DIR $UID
/run/user/1000 1001                     <-- Mismatch here! 

my-host ~ $ systemctl --user status
Failed to connect to bus: Permission denied

변경된 사항이 없으므로 systemd는 $XDG_RUNTIME_DIR원래 사용자에게 권한이 없는 사용자로 런타임에 연결을 시도합니다.my-host

~에 따르면시스템 개발자:

"su"는 사용자의 신원과 소수의 다른 프로세스의 자격 증명을 일시적으로 변경하는 데 사용되는 도구입니다. 완전히 새로운 로그인 세션을 여는 도구가 아닙니다. 새 로그인 세션에는 잘 정의된 원래 설정이 있으며 다른 세션에서 아무것도 상속받지 않지만 "su" uid 변경은 실제로 그렇게 하지 않습니다. 대부분의 실행 환경은 MAC 컨텍스트와 같이 실질적이고 명백하지 않은 방식으로 상속됩니다. 감사 컨텍스트, cgroup 컨텍스트, 네임스페이스 컨텍스트, 예약, 타이머 세분성,

대답은 my-host새로운 세션처럼 로그인하는 것입니다. 방법:

  1. 재시작
  2. 디스플레이 관리자를 종료하고 다시 로그인하세요.
  3. machinectl login
  4. ssh [email protected]

환경 변수를 수동으로 설정 하고 설정하는 등의 작업을 수행하는 다른 게시물을 본 적이 있지만 mkdir /run/user/$(id -u)가장 신뢰할 수 있는 방법은 단순히 로그인 방법을 변경하는 것입니다. 깨끗한 로그인으로 이 모든 작업을 수행할 수 있습니다.XDG_RUNTIME_DIRDBUS_SESSION_BUS_ADDRESS

답변3

내가 쓴 또 다른 답변은 사용자가 로그인한 경우에 적용됩니다. 이 답변에 대한 귀하의 의견은 귀하가 원격으로 로그인하지 않았음을 나타냅니다. my-host시스템 사용자 인 것 같습니다 .

우리가 종종 사용자 버스를 사용하려는 이유는 사용자가 자신의 장치를 제어 systemctl하고 자신의 로그를 볼 수 있기 때문입니다 journalctl. 사용자가 로그인하지 않은 시스템 사용자라면 누구도 버스를 제어할 수 없으므로 의미가 없습니다.

systemd 사용자 버스를 사용하는 대신 systemd 시스템 버스를 사용하는 것이 좋습니다.

특정 사용자로 애플리케이션을 실행해야 하는 경우 섹션 User=에 추가하기만 하면 됩니다 [Service]. 그런 다음 시스템 버스의 일부로 실행되지만 권한이 없는 시스템 사용자로 실행됩니다. 어쩌면 그게 systemctl --user당신이 처음부터 하고 싶었던 일이었을지도 모릅니다.

<systemd/sd-bus.h>호출이 포함된 응용 프로그램 이나 호출하는 스크립트를 실행하고 systemctl이를 다음과 같이 실행하려는 경우 my-host시스템 버스를 사용하지 않고도 시스템 버스에 대한 액세스 권한을 부여할 수 있습니다 sudo. 이를 위해서는 몇 가지 폴킷 규칙이 필요합니다.이 답변에 설명되어 있습니다또는이 답변. 시스템도 사용하려면 그룹에 journal추가하거나 지침을 따르 세요.my-hostsystemd-journal여기.

답변4

사용자에 대해 systemctl 제어를 활성화해야 합니다...

먼저 UID를 얻으십시오.

id 

예제 출력:
uid=1001(ocp) gid=1001(ocp) 그룹=1001(ocp),988(libvirt)

그런 다음 sudo 또는 root를 사용하여 권한을 설정합니다.

sudo machinectl shell --uid = 1001

완료되었습니다. 이제 다시 시도해 보세요.

관련 정보