1

わかりました、(ちょっとばかげているので) 説明しませんが、OS X で SSH を、たとえば 10 秒ごとに有効にするシェル スクリプトを作成する必要があります。はい、ばかげている/無意味に聞こえることはわかっていますが、理由があります。

明確にするために、ルートパスワードは知っていますが(login rootターミナルで正常に実行できます)、スクリプトは管理者以外のユーザーのログイン時に実行されます。

スクリプトは、標準 (非管理者) アカウントで起動エージェントとして実行され、SSH を有効にできるように、ルート (たまたまパスワードを知っている) に昇格する必要があります。

を使用してみましexpectたが、役に立ちませんでした (OS X での動作を拒否するだけです)。Bash スクリプトでパスワードを渡す唯一の他のオプションは を使用することecho $pass | sudo -S $commandですが、それは標準ユーザーがsudo,そしてそれはうまくいきません。

echo $pass | sudo -S login rootecho "1234" | sudo -S su root、 を試しecho "1234" | sudo -S suましたが、正しいパスワードをエコーし​​ているにもかかわらず、すべて「申し訳ありませんが、もう一度やり直してください。」 が返されますlogin root

とにかく、私の質問は、sudoスクリプトを実行している現在の標準アカウントとは対照的に、root として指定したい Bash をどのように指定できるかということだと思います。または、通常のユーザーの下で実行すると、ユーザー入力を必要とせずに、自分自身をルートまたは少なくとも管理アカウントに昇格させるスクリプトを作成するにはどうすればよいですか。もちろん、ルートへのパスワードを知っていると仮定します。

シナリオが本当に「これを行うためにスクリプトが必要な理由」に聞こえることは知っていますが、助けてください。本当に感謝しています。これが私の現在の非動作コードです。

4

2 に答える 2

6

スクリプト内にパスワードを保存する代わりに、ファイルNOPASSWD内のオプションを使用するだけです。/etc/sudoers次のような行が必要です。

username ALL = NOPASSWD: /bin/launchctl load -w /System/Library/LaunchDaemons/ssh.plist

次に、スクリプトで次のようにします。

sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

expect奇妙なことは必要ありません。

PSなぜこれを行う必要があるのですか!?

于 2012-09-12T01:34:30.817 に答える
0

Did you try to use the setuid flag on your script?

于 2012-09-12T00:21:07.957 に答える