を使用してログインシェルを呼び出すには、を使用sudo
します-i
。コマンドが指定されていない場合はログインシェルプロンプトが表示され、そうでない場合はコマンドの出力が表示されます。
例(ログインシェル):
sudo -i
例(指定されたユーザー):
sudo -i -u user
例(コマンドを使用):
sudo -i -u user whoami
例(ユーザーの印刷$HOME
):
sudo -i -u user echo \$HOME
注:バックスラッシュ文字により、ドル記号がターゲットユーザーのシェルに到達し、呼び出しユーザーのシェルで解釈されないことが保証されます。
最後に、何が起きているのかを正確に伝えるstraceの例を確認しました。以下の出力は、--login
bashの明示的な呼び出しと同様に、指定されたコマンドでシェルが呼び出されていることを示していますが、さらにsudoは$HOME
。
# strace -f -e process sudo -S -i -u user echo \$HOME
execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
...
[pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
...
私はあなたが使用していることに気づきました、-S
そして、それが一般に良いテクニックであるとは思いません。キーボードから認証を実行せずに別のユーザーとしてコマンドを実行する場合は、代わりにSSHを使用できます。localhost
他のホストと同様に機能し、インタラクティブな入力なしで機能する公開鍵認証を提供します。
ssh user@localhost echo \$HOME
注:SSHサーバーは常にSSHシェルがアクセスするログインシェルを作成するため、SSHで特別なオプションは必要ありません。