web-dev-qa-db-ja.com

Bashからrootとしてログインして作業を行う方法

これは私の簡単なbashです:

cat test.sh

#!/bin/bash 
echo "hello"
su - root -c /path/to/script.sh <<EOF
password                              
EOF
whoami
echo "good bye"

しかし、私はこのエラーを受け取ります:

./test.sh
hello
su: must be run from a terminal
<current-user>
good bye

(または)

cat test2.sh
#!/bin/bash 
echo "hello"
Sudo su <<EOF
password                              
EOF
whoami
echo "good bye"

もう一度別のエラー

(または)

cat test3.sh
#!/bin/bash 
echo "hello"
su root <<EOF
password                              
EOF
whoami
echo "good bye"

再びエラー...

私が試したとき:

#!/bin/bash
echo "hello"
Sudo -s <<EOF
<password>
echo Now I am root
id                                                                      
echo "yes!"
EOF
whoami
echo "good bye"

次に、出力は次のとおりです。

./script.sh
hello
[Sudo] password for <user>:

また、スクリプトを次のように変更しました。

#!/usr/bin/expect -f
spawn Sudo -s <<EOF
expect "assword for user:"
send -- "password\r"
expect eof

出力は次のとおりです。

spawn Sudo -s <<EOF
[Sudo] password for user:
/bin/bash: <<EOF: command not found

またwhich sh出力は/bin/sh

これらの3つのスクリプトのエラーを解決するにはどうすればよいですか?

4
MLSC

パスワードをパイプして、スクリプト内のコマンドで送信できます。

echo "password" | Sudo -S 

ただし、コマンドラインでパスワードを送信することはお勧めできません。スクリプトからrootとしてログインする方法の詳細が必要な場合は、提供されている回答 here を確認できます。

ただし、実験的な目的の場合は、コマンドラインからパスワードを入力することを想定して使用できます。スクリプトは以下のように変更する必要があります。

#!/usr/bin/expect -f 
spawn Sudo -s <<EOF 
expect "assword for username:" 
send -- "user-password\r" 
expect eof

パスワードを入力した後、Enterキーを押す必要があるため、最後の行が必要です。 Tianが示唆したように、シェルスクリプトでrootパスワードを送信することはお勧めできません。

5
Ramesh

スクリプトにrootパスワードを埋め込むのは良い考えではありません。セキュリティの観点から、これがおそらくsuが最初に端末からパスワードを取得しようとする理由です。

Sudoを使用する方がより適切なルートです。より柔軟で、特定のコマンドのみ、または特定のユーザーでさえ、パスワード(man Sudo)。

@Ketanのリファレンスも読む価値があります。

4
X Tian

I GOT ANSWER FROM here

この種のことを行うことは安全ではなく、標準的な方法でもありません(実際、多くの人がそれを危険だと考えています)。より標準的なアプローチは、スクリプト全体がroot権限で実行されることを単に期待するか、スクリプトにパスワードを要求させるだけです。 /etc/suodersNOPASSWDオプションを使用して、特定のユーザーがパスワードなしでSudo経由でさまざまなコマンドを実行できるようにすることもできます。

ただし、リスクを認識したので、Sudo -kSを使用してSudoにstdinからパスワードを読み取らせることができます。

Sudo -kSs << EOF
password
whoami
echo "Not a good idea to have a password encoded in plain text"
EOF
2
MLSC

/ etc/sudoersを試しましたか?

your_user ALL=(ALL) NOPASSWD: /path/to/script.sh

(編集:sudoedit/etc/sudoers)次に、次のコマンドを実行できます:

Sudo /path/to/script without password
0