「machinectlShell」またはsystemd-runにダイアログウィンドウではなくターミナルでパスワードを要求させる方法は?
以下を使用して、rootとしてコマンドを実行できます。
machinectl Shell --uid=root --setenv='DISPLAY=:1.0' --setenv=Shell=/bin/bash .Host /bin/bash -lc 'startxfce4'
ただし、ダイアログウィンドウを使用してパスワードを要求します
Sudoと同じ動作をしたい(Sudoは端末を使用してパスワードを要求するので、簡単にスクリプトを作成できます)
私が見つけた途中で、次のようなsshを使用しています。
ssh -t MyActualNormalUser@localhost
次に、上記と同じコマンドを実行します。
machinectl Shell --uid=root --setenv='DISPLAY=:1.0' --setenv=Shell=/bin/bash .Host /bin/bash -lc 'thunar'
これで、machinectlは、GUIダイアログウィンドウの代わりにターミナルを使用してパスワードを要求します。
Sshを使用せずに同じ結果を得るにはどうすればよいですか? machinectl/pkexecにターミナルでパスワードを要求させることは可能ですか?
sudoを使ってみませんか? Sudoは、実行するコマンドに対して新しいセッションを作成しません。machinectlは、完全に分離されたセッションを実行するため、スクリプト作成が容易になります。そして、私がmachinectl/pkexecを読んだとき、私が間違っていなければ、su/Sudoが置き換えられます...
別のユーザーとして何かを実行するには、さまざまな方法があります。
machinectl:これは別のセッションを作成します
ssh:これは別のセッションを作成します
systemd-run:これは個別のセッションを作成しませんが、セッションのように制御できる個別のサービスユニットを作成します。たとえば、loginctl session-status
を実行すると、セッションIDがないため、次のエラーが発生します:Could not get properties: Caller does not belong to any known session
。
pkexec:これは別のセッションを作成しません
Sudo:これは個別のセッションを作成しません
使用できるもの:
pkexec:これにはpkttyagentが必要です
machinectl:これはguiを使用してパスワードを要求します。パスにttyを使用するには、pkexec/Sudoまたはsshが必要です。
systemd-run:これはguiを使用してパスワードを要求します。パスにttyを使用するには、pkexec/Sudoまたはsshが必要です。
Sudo:Sudoはpkexecに置き換える必要があります
ssh:これにはrootパスワードが必要です。または、pkexec/Sudoまたはsshuser @localhostを使用する必要があります。
machinectlとsshだけが分離されたセッションを提供してくれました。systemd-runも悪くはありませんが、セッションを作成するためではなくスクリプト用です。
ルートを取得するには、pkexecを使用できます
timeout 3s sshpass -e pkttyagent -p $(echo $$) &
pkexec machinectl Shell --uid=root --setenv="DISPLAY=:1.0" --setenv=Shell=/bin/bash .Host /bin/bash -lc "startxfce4"
timeout 3s sshpass -e pkttyagent -p $(echo $$) &
pkexec ssh -t root@localhost "bash -lc 'export DISPLAY=:1.0 ; startxfce4'"
timeout 3s sshpass -e pkttyagent -p $(echo $$) &
pkexec systemd-run --pty --pipe --wait --collect --service-type=exec --uid=root bash -lc "export DISPLAY=:1.0 ; export Shell=/bin/bash ; startxfce4"
pkttyagent:ダイアログGuiの代わりに端末を使用してpkexecにパスワードを要求させるために必要です
タイムアウト3秒:pkttyagentが単独で死ぬことはないため、必要です。
systemd-ask-password
を使用して、bash変数にパスワードを割り当てることができます。
例
password=$(systemd-ask-password --echo "machinectl password: ")
machinectl login {{ user }} $password
machinectl Shell {{ your command }}
Rootユーザーとして、machinectl --no-ask-password
を使用できます。ドキュメントから:
--no-ask-password
特権操作の認証についてユーザーに照会しないでください。
https://www.freedesktop.org/software/systemd/man/systemd-ask-password.htmlhttps://www.freedesktop.org/software/systemd/man/ machinectl.html