SSHを介して再度ログインせずにリモートサーバーでシステムユーザー/シェルを切り替える方法は?

SSHを介して再度ログインせずにリモートサーバーでシステムユーザー/シェルを切り替える方法は?

これは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たとえば、sysadminで実行できるユーザー)。

努力する

はいsudo machinectl login。しかし、その内容は次のとおりです。

  • そこにユーザー名を再入力する必要があるので、不便です(できませんsudo machinectl login my-user
  • 1つの問題は、私のユーザーが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例セクションのマニュアルページ

関連情報