私のコンピュータには2人のユーザー(tiger、jenk)があり、
「tiger」ユーザーのログインユーザー「jenk」のシェルスクリプトを作成しようとしています。次のコードを試してみましょう。
[tiger@pagaltiger mytask]$ echo -e "IncorrectPassword\n" | su jenk
Password: su: Authentication failure
echo -e "CorrectPassword" | su jenk
[tiger@pagaltiger mytask]$
その後、Tigerユーザーとして再度ログインしました。なぜですか?
期待を使いたくない
答え1
最善のアプローチは、システムにセキュリティシェルデーモンを設定し(まだ実行されていない場合)、パスワードのないキーペア認証を使用することです。これが適切であると仮定すると、sshd
ログインtiger
して次のコマンドを実行できます。
ssh-keygen
ssh-copy-id jenk@localhost
その後、次の構文を使用してコマンドを実行tiger
できます。jenk
ssh jenk@localhost '(some command here)'
たとえば、
tiger@hostname $ ssh jenk@localhost 'whoami'
jenk
tiger@hostname $
答え2
このコマンドを実行するとパイプラインから、現在のシェルでコマンドを実行する代わりに、新しいプロセスを作成します。新しいシェルはユーザーに切り替えられますが、シェルが終了するjenk
と(他の操作がないため)、作成した元のシェルはまだユーザーとしてログインしています。
スクリプトでコマンドを実行すると、パイプラインにあるかどうかに関係なくサブシェルで実行されます。
(私の提案は、まずパスワードを入力しsu jenk
てからパスワードを入力することです。そうする方が簡単です。)