ssh 経由で再度ログインせずにリモート サーバー上の systemd ユーザー/シェルを切り替えるにはどうすればよいでしょうか?

ssh 経由で再度ログインせずにリモート サーバー上の systemd ユーザー/シェルを切り替えるにはどうすればよいでしょうか?

これは、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)

その間他の回答では、要求された変数を設定するか「偽造」することを提案しています私の意見では、これは適切な解決策ではありません。

問題は基本的に、私が1人のユーザーとしてログインしていることです(システム管理者として使用しています)そして私はユーザーを切り替えましたsuそのため、systemd がここで実行しているユーザーについてまったくわからないのは当然です... そのため、混乱していることは理解できます。

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' が認識されません

そうですね...「マシン」がないことも示されていることに注意してください (これらが何なのか? localhost1 つではないのか?):

$ 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例のセクションのマニュアルページ

関連情報