• ベストアンサー

シェルの実行中にユーザ切り替えてコマンド実行

はじめまして。 シェル初心者です。 shell.shをrootユーザでクーロン実行していますが、 shell.shの処理の中で、違うユーザでコマンド実行したいのですが、 可能かどうかも、方法が分かりません。 教えていただけないでしょうか。 環境はLinuxです。 下記のコマンドを実行したいです。 リモートでログインしてコマンド実行結果を取得する ssh -l tomcat server_tomcat grep test /tmp/test.log ※他のユーザでsshを実行してコマンド結果を取得したいです。 以上。宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

同じマシンの違うユーザでコマンド実行するのは下記の様に su の -c オプションで出来ます。 su -l 実行したいユーザ -c '実行するコマンド' ですので、件のsshコマンドを実行したい場合は↓の様になります。 su -l 実行したいユーザ -c 'ssh -l tomcat server_tomcat grep test /tmp/test.log'

参考URL:
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230892/?ST=oss
paco369
質問者

お礼

ありがとうございます。

関連するQ&A

  • PHPからシェルコマンドの実行

    PHPからシェルコマンドを実行したいのですが SSHやSCPコマンドが使えません。 phpからlsなどは問題なく実行できます。 具体的には以下のように書いています。 `scp test.log user@host:/home/hoge`; shell_exec()を使っても実行されませんでした。 環境は以下のとおりです。 PHP 5.4.17 CentOS 5.8 sshやscpコマンドをphpから実行するには何か特別な方法が必要なのでしょうか。 ご存知の方、教えてください。

    • ベストアンサー
    • PHP
  • シェルスクリプト コマンドを変数にした時の呼び方

    はじめまして、シェルスクリプトを勉強中の者です。 コマンドを変数にいれて、まとめました。 しかしコマンドの変数を呼びこもうとするとエラーになります。 ============================================ #!/bin/sh GREP="grep" cat "${GREP} '^[0-9]' /home/hoge/test.nicdf" ============================================ ================ シェル実行結果 ============= $ ./test.sh cat: grep '^[0-9]' /home/hoge/test.nicdf: そのようなファイルやディレクトリはありません どう書けば、エラーにならずに正常に動作するでしょうか? ご教授の程よろしくお願いします。

  • perl リモートでコマンド実行結果取得

    perl 初心者です。 Perlでリモートログイン後grep結果を取得する方法で分からないことがあり質問しました。 rootユーザで実行するPPP.plスクリプト内で、他のサーバにsshでログイン後grepの結果を取得しようと考えていますが、rootユーザでPPP.plを実行しスクリプト内でsshを実行するとパスワードを聞かれてしまいます。 そこで、他のユーザAAAでPPP.plを実行し、sshを実行するとパスワードは聞かれない設定になっているそうです。(詳細は分かりませんが) そこで、実現方法について下記のように考えていますが、他の方法、sshのオプション等他の考えが、あれば教えてください。確認する環境がなくて実行していませんのであっているかも分かりません。 PPP.pl実行サーバ:server1 ssh先のサーバ:server2 PPP.plの実行ユーザ:ROOT パスワードが聞かれないserver1のユーザ:AAA server2のログインユーザ:AAA ※PPP.plの実行ユーザはrootから変更はできません --------------------------------------- #ユーザAAAに変更 system("su - AAA"); #server2のgrep結果取得 my @rtn_grep = `ssh -l AAA server2 grep test /var/log/msg.log`; if($? != 0){ exit; } ## grep結果を参照 XXXX #rootユーザに戻る system("exit"); -------------------------------- 以上です。宜しくお願い致します。

    • ベストアンサー
    • Perl
  • クーロンでシェル実行、JAVAコマンドが動かない・・

    クーロンにて、シェルを自動起動し、JAVAコマンドを動かそうとしています。 cron → abc.sh実行 └def.sh実行 └JAVAコマンド実行 という位置付けです。 まず、 0 3 * * * sh /usr/src/sh/abc.sh という設定にてクーロンを自動実行しようとしました。abc.shの内容はこうです。 #!bin/sh /bin/sh /usr/src/sh/def.sh> /log/def.txt def.txtというテキストは生成されるのですが、def.shが実行されていません。。 def.shの中身はjavaコマンドで、 java aaa.bbb.ccc.ddd/conf/repair.properties というものです。 また、念のため、クーロンに直接 0 3 * * * /bin/sh /usr/src/sh/def.sh ともやってみましたが、結果は同じでした。 どうすればdef.shがちゃんと実行されるでしょうか? そもそもjavaコマンドをクーロンですることはできないのでしょうか?

  • Bシェルにてユーザの実行可否

    シェルにてrootユーザのみ実行が出来るようにしたいと思い、以下のようなシェルを書きました。 が、root以外のユーザでも実行が可能となってしまっています。実行する上でシェル、またはシェル以外で影響はあるのでしょうか?ご存知でしたらご教授願います。 ※今回はユーザID:user1で作成+実行しています。 ※このシェルのアクセス権限は"-rwxr--r--"としています。 #!/bin/sh UID=`whoami` if [ $UID -ne root ] then echo "実行はrootのみ" fi -以降、その他の処理が続く-

  • cronからのシェル実行と直接シェル実行で違いあり

    (1)ここに、mysqldumpを実行するためのシェルがあります。 → シェルの中身抜粋:  /usr/bin/mysqldump --opt --extended-insert=false --flush-logs --single-transaction --master-data=2 -h ここにホスト -uここにユーザー -pここにパスワード --databases ここにスキーマ > abc.sql (2)crontabに、上記のシェルを実行するよう登録しています。 → 00 13 * * sun /****/***.sh [結果] クーロンから実行されるとと、シェルの全体実行自体は、正常終了していますが、mysqldumpログで「Couldn't execute 'FLUSH /*!40101 LOCAL */ TABLES' : Got an error writing communication packets (1160)」とエラーが出て、ダンプが頭のコメント部のみのファイルしかできていません。 しかし、クーロン実行ではなく、/****/***.shを直接実行すると、mysqldumpも正常出力して、全体的に正常終了できます。 どちらもroot権限で実行しました。 [質問] クーロンからの実行と、直接実行で、なにか別の設定が必要なのでしょうか??

  • Solaris rmコマンドをシェルで実行するとうまくいかない

    オラクルのアーカイブログを定期的に削除するシェルを作ったのですが、rmコマンドがうまくいきません。使っている環境はkshで、業務の都合上rootユーザでシェルを実行しています。 コマンド:/bin/rm -fr /mnt01/arch01/*.log ちなみに、rootユーザでプロンプトからコマンドを手で実行すると削除ができます。 何が原因なのか見当がつかない状況に陥っています。宜しくお願いします。

  • root権限の実行コマンドを通常ユーザーで実行

    root権限に限らないのですが、他のユーザーの権限でしか実行できないコマンドを自分で実行する方法が知りたいのです。 と言っても、rootや他ユーザーのパスワードを知っているという前提です。 例えば、通常ユーザーで作業をしているときに、root権限で行う必要のあるコマンドを実行したいとします。 今は、suでログインしてから実行していますが、shellスクリプトで実行したいと思っています。 どういったshellスクリプトになりますでしょうか?

  • シェルでコマンドの実行結果を変数に格納する方法

    以下のようなコマンドライン引数を取得するシェルを書いたのですが 実行時にエラーになってしまいました。コマンド(第2引数以降を取得するコマンド)の実行結果を変数に格納するところでエラーになってしまいました。どのようにすればよろしいでしょうか。 「./test2.sh a b c d e」を実行し「a: コマンドが見つかりません」 というエラーが出てしまいます。 (test2.shの内容) #!/bin/sh OUTPUTFILE=$1 SRC_FILES=`"$@" | cut -d ' ' -f 2-` # 第二引数以降を取得 echo $OUTPUTFILE ←ここは表示される echo $SRC_FILES ←ここでエラー

  • Bシェル内でのユーザー変更

    お世話になっております。 あるBシェルをJP1に登録しジョブ実行しようとしています。 Bシェル内には複数の処理があり、必要に応じてユーザー変更を行う必要があるのですが上手く行きません。 なお、禁止事項にrootユーザーでJP1実行、suid、guidの未指定があり上手く対応が出来ません。 どなたか上手く行く方法をご存知ありませんか? 行いたい処理は以下の通りです。 (1)実行ユーザーで実行 (2)posgreユーザーでログイン (3)ダンプファイルを取得 (4)posgreユーザーをログアウト (5)sshユーザでログイン (6)ダンプファイルを移動 (7)sshユーザをログアウト (8)終了 環境は シェルはBシェル OSはRHEL5.3 です。