0

ローカル マシンにシェル スクリプトがあり、そのシェル スクリプトをリモート サーバーで実行する必要があります。次のようにいくつかの手順を実行しました。

  1. ローカル マシンとリモート サーバーからペアリングされた SSH キー。
  2. ssh user@hostname 'bash - s' < user_add.sh;

エラーが発生します:

standard in must be a tty
: command not found
bash: line 4: useradd: command not found
Usage: /etc/init.d/vsftpd {start|stop|restart|condrestart|status}
Only root can do that.
chmod: cannot access `/102/prsuser\r': Permission denied
mkdir: cannot create directory `/102/prov/\r': Permission denied
bash: line 8: useradd: command not found
Only root can do that.
chmod: cannot access `/102/prov/PROV_LIS_RESP_DIR\r': Permission denied
chown: cannot access `/102/prov/\r': Permission denied
bash: line 12: /etc/vsftpd/chroot_list: Permission denied

ルートログインは通常ではできません. で通常のユーザーアカウントから切り替えることでルートとしてログインできますsu - command.

リモートサーバーでスクリプトをルートとして実行する方法と、スクリプト(user_add.sh)内の開始点でルートアカウントを切り替えるために使用されるスクリプトは何ですか?

4

3 に答える 3

0

user_add.shroot 権限を持つユーザーでコマンドを実行できるように変更できます。

su $ROOT_USER -c "command arg1 arg2"
于 2012-07-31T11:10:17.727 に答える
0

su の代わりに sudo を使用できます (sudoers ファイルでユーザーとして使用する必要があるすべてのコマンドを定義します)。

root アカウントを有効にすることもできます。補足として、アカウントに必ずしも「root」という名前を付ける必要はありません。実際に新しいユーザー (名前は何でも) を作成し、passwd ファイルを編集して、そのアカウントに uid 値 0 を割り当てることができます。

于 2012-07-31T11:27:29.893 に答える
0

あなたが達成しようとしていることは少し奇妙ですが、あなたはそれを行うことができます:

ssh user@hostname sudo -S < user_add.sh

にあるコマンドはuser_add.shで解釈されhostname、 内で実行されますsudo。ユーザーはat (withステートメント)userに対応するエントリを持っている必要があります。/etc/sudoershostnameNOPASSWD

追加できない場合はNOPASSWD、次の方法でコマンドを実行する必要があります。

(echo PASSWORD; cat user_add.sh) | ssh user@hostname

userPASSWORD の代わりにatのパスワードを書かなければなりませんhostname

に自動的に追加されsudoない場合は、手動で追加する必要があります。/sbinPATH

(echo PASSWORD; echo 'PATH=/sbin:/usr/sbin:$PATH'; cat user_add.sh) \
| ssh user@hostname 

そして最後に。スクリプトに記号が含まれていることに気付き\rました (Windows で編集されていますか?)。それらを削除することをお勧めします:

(echo PASSWORD; echo 'PATH=/sbin:/usr/sbin:$PATH'; cat user_add.sh) \
| tr -d '\r' \
| ssh user@hostname 
于 2012-07-31T19:55:27.290 に答える