• ベストアンサー

リモートでのスクリプトファイルの実行方法について

Solaris9を利用しております。 データを更新するスクリプトファイル(shファイル)があり、現在はcronで スケジュール設定を行っております。 最近、そのスクリプトファイルの実行をユーザの意図したタイミングで走らせたい という要望が挙がっております。 ただし、そのユーザはUNIXについては全く知らない素人なため、直接コマンドを 実行させるのは避けたい状況です。(ログインパスワードも知らせたくない) という状況なのですが、簡単な操作でスクリプトを実行できる何か良い方法はありますでしょうか? 宜しくお願い致します。

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

  • ベストアンサー
  • ssm3u
  • ベストアンサー率52% (19/36)
回答No.8

確かにおっしゃるとおりです。 クライアントPCへのログインアカウント = .rhosts に記載するアカウント rsh コマンドで指定するアカウント = Solaris に作成するアカウント 私の環境では、上記4つが全て同じアカウント名であり、 クライアントPCへのログインアカウントを考慮する点を忘れておりました。 すいません。時間を取らせましたことお詫びします。

liao
質問者

お礼

> クライアントPCへのログインアカウントを考慮する点を忘れておりました。 > すいません。時間を取らせましたことお詫びします。 いえいえ。いろいろありがとうございました。 Solaris上でWindowsのログイン名を認識するはずがないという先入観もあり・・・ 動作した時に「まさか・・・?!」と思いましたが、、 そうなんですね、正直これには驚きでした。 勉強になりました。ありがとうございます。 また問題クリアされましたので、これで要望どおりの動作が可能になりそうです m(^^)m

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

  • ssm3u
  • ベストアンサー率52% (19/36)
回答No.7

> ホスト名は、IPアドレスでOKですよね? 私の環境で、.rhosts の内容をIPアドレスに変更したところ permission denied rsh: can't establish connection になりました。 IPアドレス指定ではダメなようです。 一度、ホスト名指定に変更してみてください。 私の今日の仕事が .rhosts の勉強になっています・・・(笑)

liao
質問者

お礼

いろいろありがとうございますm(__)m ただ、未だにダメです。 (ホスト名にも変えてみました。) 今いろいろ調べていますが・・・ 進展なしです。 取り急ぎ、状況報告まで。 進展がありましたらコメントします。

liao
質問者

補足

やっと動作しました。 ありがとうございます。 仕様を勘違いしていたのかもしれませんが、 > .rhostsファイル の設定(Solaris内) に記述するユーザ名は何のユーザ名でしょうか? 私の認識・設定した内容は、 (1)「testuser」というユーザをSolarisOS上に作成 (2).rhostsに接続を許可するホスト名と「testuser」を記載 (3)rshを実行するマシンにて「rsh HOSTNAME -l testuser ls」を実行 でした。そしてダメでした。 (2)と(3)との情報で認証を行っていると思っておりました。 ↑認識間違っておりますか? rhostsファイルに「testuser」ではなく、ローカルマシンのWindowsのログイン名(ActiveDirectoryにログインしているユーザ名)を記載したところ正常に動作しました。他の設定はいじっておりません。 結果動作してよかったのですが、何か余計に混乱してきました・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • ssm3u
  • ベストアンサー率52% (19/36)
回答No.6

パーミッションエラーですね。。。。 testuser で 172.45.123.1 にログインし、 ps -el コマンドを実行してください。その中に inetd が存在しますか? 存在しないのであればサーバ管理者によって r系 の実行が全て拒否されています。 /etc/inetd.conf の設定を変更しない限り rsh での接続はできません。 inetd がちゃんと存在するのであれば、.rhosts の中を再度確認してください。 接続してくるホストのホスト名[タブ区切り]ユーザ名(testuser) です。 これでもダメならば .rhosts のパーミションを 644 or 600 にしてください これでどうかな? 根本的に私が勘違いしているような気もしてきました・・・ あと、1時間ぐらいほっておくと接続できるようになる! みたいな体験をしたこともあります。(笑)

liao
質問者

お礼

> ps -el コマンドを実行してください。その中に inetd が存在しますか? はい、存在してます。 --------- $ ps -ef | grep inetd root 160 1 0 8月 26 ? 0:00 /usr/sbin/inetd -s $ $ --------- マシン・ユーザごとに、RSHを有効にする、などの設定の必要はないですよね? 以下のサイトを見て、inetd.confファイルの中で、rlogind,rshdを検索してみたのですが 見つかりませんでした。 OS側の設定が、何か抜けてますかね? http://x68000.q-e-d.net/~68user/unix/pickup?%7E%2F%2Erhosts OSはSolaris8でテストを行ってます(実運用はSolaris9) > inetd がちゃんと存在するのであれば、.rhosts の中を再度確認してください。 > 接続してくるホストのホスト名[タブ区切り]ユーザ名(testuser) > です。 > これでもダメならば .rhosts のパーミションを 644 or 600 にしてください も問題ないと思います。 ホスト名は、IPアドレスでOKですよね? パーミッションも644となっております。 時間が経って解決してくれれば良いんですがね・・・(笑)

全文を見る
すると、全ての回答が全文表示されます。
  • ssm3u
  • ベストアンサー率52% (19/36)
回答No.5

ANo3,4 のものです。 OSかバージョンを勘違いしていたようです。 順番が違うみたいですね。 C:\tmp>rsh 172.45.123.1 -l testuser ls これでどうですか? これでちゃんと表示されるようになれば、 あとは ls コマンドの変わりにシェルスクリプトを指定すればOKですね。

liao
質問者

お礼

単純に文法(順番)の間違いだったんですね。 すみません 修正して試してみたところ、 ------- 172.45.123.1: permission denied rsh: can't establish connection ------- というエラーが発生してしまいました。 権限エラーのようですが、なぜか分かりますでしょうか? 度々すみません。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • ssm3u
  • ベストアンサー率52% (19/36)
回答No.4

ANo.3 のものです。 > > .rhostsファイル の設定(Solaris内) > についてですが、どのような設定を行えばよいのでしょうか? 作成したユーザアカウントのホームディレクトリに作成します。 ホスト名(hoge.foo.co.jp)とユーザアカウント名(user2)をタブで区切って記述します。 hoge.foo.co.jp user2 ←こんな感じ。 指定したホストから指定したユーザアカウントのみ接続を許す! といったものになります。 > バッチファイルの作成(ユーザPC内) バッチファイルには、rsh コマンドを記述するだけです。 データを更新するスクリプトファイル(shファイル)を a.sh とすると rsh -l user1 hoge.foo.co.jp a.sh (a.sh はフルパスで指定することをお薦めします) バッチファイルは、****.bat で保存しておけばOKです。 > login、スクリプトファイルを実行、exitで良いのでしょうか? > 何か気をつけることはありますか? rsh での実行には login や exit は、関係ありません。 > ただし、そのユーザはUNIXについては全く知らない素人なため、直接コマンドを > 実行させるのは避けたい状況です。(ログインパスワードも知らせたくない) 利用者に信頼が置けない場合は、 shファイル内に管理者通知機能を付けることをお薦めします(笑)

liao
質問者

お礼

ご回答が遅くなってしまい申し訳ございません。 コメントいただいたように設定を行い、実際に動作を確認してみましたが、うまく動作していないようです。(接続できていない?) Windowsからbatファイルを実行した結果は以下の通りです。 (とりあえずlsの結果を返そうと思って以下のようにしてみました) --------------------------------------------------------------------------- C:\tmp>test.bat C:\tmp>rsh -l testuser 172.45.123.1 ls Runs commands on remote hosts running the RSH service. RSH host [-l username] [-n] command host Specifies the remote host on which to run command. -l username Specifies the user name to use on the remote host. If omitted, the logged on user name is used. -n Redirects the input of RSH to NULL. command Specifies the command to run. C:\tmp> --------------------------------------------------------------------------- 何か考えられる原因はありますでしょうか? 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • ssm3u
  • ベストアンサー率52% (19/36)
回答No.3

rsh で実行すればよいと思います。 ユーザアカウント作成(Solaris内) .rhostsファイル の設定(Solaris内) バッチファイルの作成(ユーザPC内) この3つを用意すれば実行できます。

liao
質問者

お礼

ご回答ありがとうございます。 > .rhostsファイル の設定(Solaris内) についてですが、どのような設定を行えばよいのでしょうか? > バッチファイルの作成(ユーザPC内) についてですが login、スクリプトファイルを実行、exit  で良いのでしょうか?何か気をつけることはありますか? Windowsからsolarisに接続するバッチファイルを作ったことが無く、またSolarisに関しても素人なため、基礎的な質問で申し訳ございませんが宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

No1です。 下記2の方法のやり方の参考にしてください。 シェルスクリプトの最後にexitさせておけば、ログイン後即スクリプト実行→ログアウトとなります。

参考URL:
http://h50221.www5.hp.com/cgi/service/knavi/production/doc_disp.cgi?category=886&doc=jnav007200
全文を見る
すると、全ての回答が全文表示されます。
回答No.1

思いつくのは、 1.メールが受け取れるマシンなら、aliasesか.forwardでスクリプトに渡す。 2.専用のアカウントのログインシェルにそのスクリプトを指定しておき、ログインすれば動くようにしておく。 3./etc/inetd.conf で、あるポート(例えば、fingerとか)にパケットが来たらスクリプトが動くようにしておく。 3はあまり薦められませんが...

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • csh スクリプトの実行者を知りたい

    スクリプト内部で、そのスクリプトを実行しているのが、 ユーザーなのか、cronなのかを判定することは可能でしょうか? 具体的には、hoge.cshというスクリプトがあり、 これはユーザーmogeのcronで週一回実行するよう登録されています。 さらに、このスクリプトは、メンテナンス時などに、 ユーザーmogeがコマンドラインからも実行することがあります。 スクリプト内部で、cronから走った時と、コマンドラインから 走らせた時で異なるlogを吐かせたいのですが、 どのようにしたらよいでしょうか。 宜しくお願いします。

  • cronでifconfigコマンドを使用するスクリプトを実行すると値が

    cronでifconfigコマンドを使用するスクリプトを実行すると値が取れないのですが、 なぜなんでしょうか?どうすれば値が取れるようになるのでしょうか? OSはubuntu10.04を使っています。 直接実行した場合はファイル出力されるのですが、 cronで実行した場合は日付しか出力されません。 どなたかよろしくお願いします。 -----test.sh----- date >> test.log ifconfig >> test.log -----------------

  • cronでシェルスクリプトが実行されない

    Linuxでファイルのバックアップを取るため backup.shというシェルスクリプトを組み、コマンドから実行する場合問題ないことを 確認しています。ところがcronに設定し自動実行すると内容が実行されておりません。 /var/log/cronを確認したところ時間通り実行されているというログは残っています。 /var/spool/cron/にrootというファイルを作成し 00 23 * * * /BACKUP/backup.shを実行させたいのです。 なぜ、手動の場合は問題がないのにcronで設定すると問題が生じるのでしょう? もし、お分かりの方は教えてください。 OSはRed Hat Linux release 8.0 (Psyche)です。

  • リモートシェルでファイルをrootで実行させる方法

    UNIX1マシンから一般ユーザーで、ramshを使って UNIX2マシンのシェルをrootで実行させる、という仕組みを 自動化させたいのですが、パスワードが聞かれるためうまくいきません。 何か良い方法はあるでしょうか? もしくは一般ユーザーがUNIX2のシェルを実行し、その中で suコマンドを使ってrootであるファイルを実行する、というパターン でもいいのですが。 宜しくおねがいします。

  • シェルスクリプトで複数実行するには?

    web上からもアクセスできるphpに、定期的にアクセスするようにしたいと思っています。 定期的にアクセスするには、cronを利用すればできると思っていますが、phpへアクセスする方法が分からないために、別の記事にて質問させて頂いています。 (cronが利用できる、レンタルサーバを利用しております。) そこで、いろいろと調べていたところ、.shの拡張子のファイルを作成して、その中に命令事項を記入しておき、cronで.sh(シェルスクリプト?)を実行すれば良いみたいな事が記載されていました。 定期的自動にアクセスしたいphpファイルは複数あるので、phpファイルごとにcronを設定するより、このシェルスクリプトを利用して、複数のphpにアクセスできるようにできれば良いと思いました。 例えば「abc.sh」と言うファイルに、下記を記載してアップロード、パーミッションの設定。 #!/bin/sh/usr/bin/wget -q --spider http://xxx.yyy.com/abc/xxx.php そして、cronで実行日時を設定してこのファイルを実行すれば、「http://xxx.yyy.com/abc/xxx.php」へアクセスするような事が書かれていました。 複数のアドレスにアクセスさせたい場合は、.shのファイルにはどのように記述をすれば良いのでしょうか? またcron終了後にログメールが送信されてきますが、このログメールを送信しないようにするには、どのような記述をすれば良いのでしょうか? 一応調べてみたのですが、確認をお願いします。 abc.sh >/dev/null または abc.sh 2>&1 > /dev/null または abc.sh > /dev/null 2>&1 上記のような、複数の記述方法がありました。 どの記述方法がベターでしょうか。 質問をまとめますと、 複数のphpにアクセスする、シェルスクリプトの記述方法について。 cron終了後のログメールを送信しないようにするための、cronのコマンドの記述方法。 アドバイスを頂けると助かります。

  • UNIX : cronにて自動実行すると、whoami が実行できない

    Kornシェルスクリプト(仮名:a.ksh)内の処理で、 「 whoami >> file1 」 をcron設定にて自動実行したところ、上記のコマンド部分が実行されておらず、file1(ファイル)にユーザ名が記載されていませんでした。 しかし、a.kshを手動実行しfile1を見ると、ユーザ名が記載されていて、上記のコマンド部分が実行できていることを確認致しました。 なぜcronにて自動実行すると、上記のコマンド部分が実行できないのでしょうか? 皆様、よろしくお願い致します。

  • sudoでシェルスクリプトを実行させたい

    /usr/bin/sudo を使って、xxx.shを実行させたいので、設定でxxx.shを許可しました。 その後Apacheで動くCGI(perlスクリプト)から、``を使って実行させようと考えています。 このときにこのxxx.shがうまく動きません。多分シェルにアクセスできないのだと思いますが、どうしたらこのスクリプトをroot権限で動かす事ができるようになるのでしょうか。関係あるかどうかわかりませんが、xxx.shの中身はディレクトリ作成コマンドなどです。ネットで検索したら、シェルスクリプトだけ許可にすればよいとあったのですが・・。セキュリティ的には/bin/shを許可するのはまずそうな気がするのですが、こちらを許可してもよいものでしょうか。 環境等 xxx.sh 755 所有者(user1) Apache実行ユーザ (apache) CGIの実行ユーザ(apache?) 挑戦したコマンド(とアパッチのログ) `/usr/bin/sudo sh ./xxx.sh`; ->パスワード求められます (/bin/shの権限がない?) `/usr/bin/sudo ./xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) `/usr/bin/sudo フルパス/xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) 不足の点などあればご指摘ください。

  • CORESERVERでCRONジョブが実行されない

    この手の情報はネット上に沢山あるので自分なりに調べたのですが解決に至りませんでしたので質問させてください。 やりたいことは、CORESERVERのCRONジョブで設定した時間にcron.shを動かしてtest.phpを実行したいです。 ■現状 ・CRONジョブは毎日午前11時に動作するように設定 0 11 * * * ・CORESERVERからCRONジョブのエラーや成功メールが1通も届かない ・Tera Term で直接CRONを実行したが500エラーが返ってくる ・シェルスクリプトで動かしたいPHPファイルに問題はなかった(直接実行して成功) ■やったこと cron.shをCORESERVERのトップディレクトリに設置 /virtual/ユーザー名/cron.sh cron.shに記述した内容は #!/bin/sh #PHP /usr/local/bin/php /virtual/ユーザー名/public_html/サイトディレクトリ/php/test.php exit です。cron.shのパーミッションは705にしました。改行コードはLFです。 test.phpまでのディレクトリのパーミッションも705になっています。test.phpのパーミッションは644です。 Tera Term に入力したコマンド? sh /virtual/ユーザー名/cron.sh 上記を決定すると以下のスターテスが返ってきました。 Status: 500 Internal Server Error Content-type: text/html 何か根本的な間違いをしているのでしょうか? アドバイスをお願いいたします。

  • 負荷を避けてスクリプトを実行させる方法

    負荷を避けてスクリプトを実行させる方法 メールを受信したらプログラムを実行させるようにしています。 何通もメールが来た時に正常にプログラムが実行できない時があります。 そこでbatchコマンドを盛り込んで行きたいのですが具体的な使い方がわかりませんでした。 スクリプトファイルの先頭にbatchコマンドを置けばよいのか、 /etc/mail/aliasesで初めから hogehoge: "| batch -f /etc/hogehoge.sh" のようにするのかわかりません。 もしくは別の方法があるのでしょうか? やりたい事は負荷を避けてなるべく正確にスクリプトを実行させたいのです。 どなたかわかるかたよろしくお願いします。

  • シェルスクリプトファイルからjavaを実行したい

    シェルスクリプトファイル(拡張子が.shのファイル)からJavaを実行したいのですが上手くいきません。 コマンドラインで直接 cd javaのファイルが置いてあるディレクトリへのフルパス を実行した後 java 実行するクラス名 引数 とすると上手く動きます。 上記2行をshファイルにコピペしてみましたが、エラーになり動きません。 エラーは : No such file or directory cdをしている行とcdで移動しようとしているディレクトリパス Exception in thread "main" java.lang.NoClassDefFoundError: 実行するクラス shファイルの1行目に #!/bin/sh や #!/bin/bash を入れてみましたが、どちらも挙動が変わりません。(エラーのまま) shファイルはUTF-8を文字コードにして改行はLFのみです。 また、javaコマンドを実行するとき -cp や -classpath 引数でjavaのファイルが有るディレクトリを指定してみましたが挙動が変わりません。 shの実行はコマンドラインから sh shファイル(絶対パスで) source shファイル(絶対パスで) でやってみましたが駄目でした。 javaのファイルが有るディレクトリに対してパスを貼ってみましたが挙動が変わりません。 コマンドラインからコピペしてshファイルを作っていますので、フォルダ名等のつづりミスの可能性は低いと思います。 何か設定が足りないのでしょうか? よろしくお願いいたします。

このQ&Aのポイント
  • 簡単換装SSD 特別販売を購入して2年ほど問題なく使用して居ましたが、PCをリカバリーしました。換装時にハードディスクを当時のバックアップとして持っていますが、このバックアップをリカバリーしたPCに読み込むことができますか。
  • 2年ほど問題なく使用していた簡単換装SSD特別販売を購入しましたが、最近PCをリカバリーしました。換装時にはハードディスクを当時のバックアップとして保管しており、それをリカバリーしたPCに読み込むことができるのか疑問です。
  • 簡単換装SSD特別販売を購入して2年間使用していますが、PCのリカバリーを行いました。換装時にはハードディスクをバックアップとして保存しており、リカバリーしたPCに問題なく読み込むことができるでしょうか。
回答を見る