Como alternar o usuário/shell do systemd no servidor remoto sem fazer login novamente via ssh?

Como alternar o usuário/shell do systemd no servidor remoto sem fazer login novamente via ssh?

Esta é uma máquina remota com acesso SSH e systemd.

Basicamente, tenho este erro quando tento executar comandos de usuário do 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)

Enquantooutras respostas sugerem apenas definir ou "falsificar" as variáveis ​​solicitadasIMHO, esta não é uma solução adequada.

O problema é basicamente que eu entrei como usuário único (uso como administrador do sistema)e eu mudei o usuário viasu. Como tal, é muito compreensível que o systemd não tenha ideia de qual usuário estou executando aqui… Então eu entendo que está confuso.

Observe enquanto para serviços systemdtalvez usando o barramento do sistematalvez seja a melhor ideia.

No entanto, para experimentar o podman e especialmente podman generate systemdtambém deseja uma sessão em nível de usuário, talvez apenas ter umpersistenteuser( loginctl enable-linger) é uma maneira útil.


Agora a questão real:Como posso mudar para outro usuário, para que o systemd realmente saiba que esse usuário está logado?Eu só quero "operar" como um usuário diferente (em um novo shell). Como se eu fosse usar su.

Observe que não quero fazer SSH no servidor como outro usuário. Isso requer chaves SSH adicionais e outras coisas que simplesmente não são necessárias. Quero mudar de usuário enquanto estiver logado (como um usuário que pode executar sudo, ou seja, administrador do sistema).

Tentativas

Eu tenho sudo machinectl login, mas isso é:

  • inconveniente, pois preciso digitar o nome de usuário novamente (não consigo fazer sudo machinectl login my-user.
  • um problema, pois meu usuário é um usuário do sistema apenas para podman e não tenho uma senha definida – então não consigo fazer login com uma senha

Eu descobri machinectl shellque parece exatamente o que quero fazer, mas não consigo fazê-lo funcionar. Eu tentei machinectl shell my-usere machinectl shell my-user@localhost, mas sempre me diz:

Falha ao obter shell PTY: Nenhuma máquina 'localhost' conhecida

Bem… observe que isso também me mostra que não tenho "máquinas" (o que quer que sejam? Não é localhostuma?):

$ machinectl list
No machines.

Responder1

Ah, quase consegui:

Observe que, por qualquer motivo, a "máquina" local (ou seja, "localhost") machinectlé chamada :host.

Além disso, por qualquer motivo, ele o esconde no arquivo machinectl list. Você precisa correr machinectl list --allpara realmente ver.

Agora, como sabemos disso, é realmente muito fácil: basta executar isto:

$ sudo machinectl shell [email protected]

E aí está você... em sua nova concha de my-user. Você pode (de certa forma) verificar isso se verificar as variáveis ​​ambientais $XDG_RUNTIME_DIRe $DBUS_SESSION_BUS_ADDRESSque estavam lá no meu erro inicial.

Observe também que aparentemente existe outra sintaxe alternativa que não requer o conhecimento dessa máquina "local":

$ sudo machinectl shell --uid my-user

Na verdade, isso também é mencionado no final domachinectlpágina de manual na seção de exemplos.

informação relacionada