スクリプトでsudo suを使用してコマンドを実行し、stdinとstdoutをリダイレクトします。

スクリプトでsudo suを使用してコマンドを実行し、stdinとstdoutをリダイレクトします。

別のユーザーとしてコマンドを実行し、標準入力に書き込み、標準出力から読み取る必要があります。新しいシェルを開く必要がある場合は、他のユーザーとしてのみコマンドを実行できます。sudo su anotheruserただし、新しく開いたシェルでは、呼び出し側の stdin と stdout が失われます。走ることは許されないsudo -u anotheruser -c command

stdin / stdoutリダイレクトに名前付きパイプを使用できることを知って、次のスクリプトを作成しました。

#!/usr/bin/env bash

mkfifo pipein
mkfifo pipeout

echo '/usr/lib/openssh/sftp-server 0<pipein >pipeout' | sudo su anotheruser

cat 0<&1 >pipein & cat <pipeout

wait

しかし、期待どおりに動作しません。スクリプトを元のコマンドとしてシームレスに使用できるように、スクリプトの標準入力をコマンドの標準入力に、コマンドの標準出力をスクリプトの標準出力にリダイレクトしたいと思います。

ベストアンサー1

あなたの投稿にいくつかの編集エラーがあるようです。 sudo 行に「&」がありません。後でスクリプトでパイプに別の名前を使用します。私に役立つのは次のとおりです。

#!/usr/bin/env bash
mkfifo pipein
mkfifo pipeout
echo '/usr/lib/openssh/sftp-server <pipein >pipeout' | sudo su anotheruser &
cat <pipeout &
cat >pipein
wait
rm -f pipein pipeout

おすすめ記事