이는 SSH 액세스 및 systemd가 있는 원격 시스템입니다.
systemd 사용자 명령을 실행하려고 하면 기본적으로 다음 오류가 발생합니다.
$ systemctl --user status
Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
하는 동안다른 답변에서는 요청한 변수를 설정하거나 "가짜"로 제안합니다.IMHO, 이것은 적절한 해결책이 아닙니다.
문제는 기본적으로 단일 사용자로 로그인했다는 것입니다(저는 시스템 관리자로 사용합니다).그리고 저는 다음을 통해 사용자를 전환했습니다.su
. 따라서 systemd는 내가 여기서 어떤 사용자를 실행하고 있는지 전혀 알지 못합니다… 그래서 혼란스럽다는 것을 이해합니다.
시스템 서비스에 대한 참고 사항어쩌면 시스템 버스를 사용하는 것일 수도 있습니다아마도 더 나은 생각 일 것입니다.
그러나 Podman을 실험하고 특히 podman generate systemd
사용자 수준 세션을 원할 경우오래 끄는user ( loginctl enable-linger
)는 유용한 방법입니다.
이제 실제 질문은 다음과 같습니다.이 사용자가 현재 로그인되어 있다는 것을 systemd가 실제로 알 수 있도록 다른 사용자로 전환하려면 어떻게 해야 합니까?나는 단지 다른 사용자로서 (새 셸에서) "작동"하고 싶습니다. 마치 내가 su
.
다른 사용자로 서버에 SSH를 연결하고 싶지 않습니다. 이를 위해서는 추가 SSH 키와 필요하지 않은 기타 항목이 필요합니다. 로그인되어 있는 동안(예: 시스템 관리자를 실행할 수 있는 사용자로) 사용자를 전환하고 싶습니다 sudo
.
시도
, 하지만 그건 sudo machinectl login
다음과 같습니다.
- 불편합니다. 거기에 사용자 이름을 다시 입력해야 하기 때문입니다(할 수 없습니다
sudo machinectl login my-user
. - 문제는 내 사용자가 podman만을 위한 시스템 사용자이고 비밀번호가 설정되어 있지 않기 때문에 비밀번호로 로그인할 수 없기 때문입니다.
을(를) 찾았는데 machinectl shell
, 정확히 내가 하고 싶은 일인 것 같지만 작동시킬 수 없습니다. 나는 시도했지만 machinectl shell my-user
항상 machinectl shell my-user@localhost
나에게 다음과 같이 말합니다.
쉘 PTY를 가져오지 못했습니다. 알려진 'localhost' 머신이 없습니다.
글쎄… 또한 나에게 "기계"가 없다는 것을 보여줍니다(이게 무엇인가요? localhost
하나도 아닌가요?).
$ machinectl list
No machines.
답변1
아, 거의 알았어요:
어떤 이유로든 의 로컬 "머신"(예: "localhost")이 machinectl
호출된다는 점에 유의하세요 :host
.
또한 어떤 이유로든 machinectl list
. machinectl list --all
실제로 보려면 달려가야 합니다 .
이제 우리가 알고 있듯이 실제로는 매우 쉽습니다. 다음을 실행하세요.
$ sudo machinectl shell [email protected]
그리고 거기에… 새로운 셸이 있습니다 my-user
. 환경 변수를 확인 $XDG_RUNTIME_DIR
하고 $DBUS_SESSION_BUS_ADDRESS
초기 오류에 있었던 것을 (어느 정도) 확인할 수 있습니다.
또한 해당 "로컬" 시스템에 대한 지식이 필요하지 않은 또 다른 대체 구문이 있다는 점에 유의하세요.
$ sudo machinectl shell --uid my-user
사실 이 내용은 맨 마지막에도 언급되어 있습니다.machinectl
예제 섹션의 매뉴얼 페이지.