¿Cómo cambiar de usuario/shell de systemd en un servidor remoto sin iniciar sesión nuevamente a través de ssh?

¿Cómo cambiar de usuario/shell de systemd en un servidor remoto sin iniciar sesión nuevamente a través de ssh?

Esta es una máquina remota con acceso SSH y systemd.

Básicamente tengo este error cuando intento ejecutar comandos de usuario de 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)

Mientrasotras respuestas sugieren simplemente configurar o "falsificar" las variables solicitadasEn mi humilde opinión, esta no es una solución adecuada.

El problema es básicamente que inicié sesión como un solo usuario (lo uso como administrador del sistema)y cambié el usuario a través desu. Como tal, es muy comprensible que systemd no tenga idea de qué usuario estoy ejecutando aquí... Entonces entiendo que está confuso.

Nota mientras para los servicios systemdtal vez usando el bus del sistemaQuizás sea la mejor idea.

Sin embargo, para experimentar con podman y especialmente podman generate systemdtambién quiere una sesión a nivel de usuario, tal vez simplemente tener unaconstanteusuario ( loginctl enable-linger) es una forma útil.


Ahora la pregunta real:¿Cómo puedo cambiar al otro usuario para que systemd realmente sepa que este usuario ya ha iniciado sesión?Sólo quiero "operar" como un usuario diferente (en un nuevo shell). Como si fuera a usar su.

Tenga en cuenta que no quiero ingresar SSH al servidor como otro usuario. Eso requiere claves SSH adicionales y otras cosas que simplemente no son necesarias. Quiero cambiar de usuario mientras estoy conectado (como usuario que puede ejecutar sudo, es decir, administrador del sistema).

Intentos

Lo he hecho sudo machinectl login, pero eso es:

  • inconveniente, ya que necesito escribir el nombre de usuario nuevamente allí (no puedo hacerlo) sudo machinectl login my-user.
  • Hay un problema, ya que mi usuario es un usuario del sistema solo para podman y no tengo una contraseña establecida, por lo que no puedo iniciar sesión con una contraseña.

Encontré machinectl shell, que suena exactamente lo que quiero hacer, pero no puedo hacerlo funcionar. Lo he intentado machinectl shell my-usery machinectl shell my-user@localhost, pero siempre me dice:

No se pudo obtener el PTY del shell: no se conoce ninguna máquina 'localhost'

Bueno... note que también me muestra que no tengo "máquinas" (¿cualesquiera que sean estas? ¿No es localhostuna?):

$ machinectl list
No machines.

Respuesta1

Ahh, casi lo consigo:

machinectlTenga en cuenta que, por alguna razón , se llama a la "máquina" local (es decir, "localhost") :host.

Además por alguna razón lo esconde en machinectl list. Tienes que correr machinectl list --allpara verlo realmente.

Ahora, dado que sabemos eso, en realidad es bastante fácil: simplemente ejecuta esto:

$ sudo machinectl shell [email protected]

Y ahí estás... en tu nuevo caparazón de my-user. Puede (en cierto modo) verificar esto si verifica las variables ambientales $XDG_RUNTIME_DIRque $DBUS_SESSION_BUS_ADDRESSestaban allí en mi error inicial.

También tenga en cuenta que aparentemente existe otra sintaxis alternativa que no requiere el conocimiento de esa máquina "local":

$ sudo machinectl shell --uid my-user

En realidad, eso también se menciona al final delmachinectlpágina de manual en la sección de ejemplos.

información relacionada