0

標準入力からユーザー名とパスワードを要求する 1 つのシェル スクリプトを作成しました。ユーザー名とパスワードを入力すると、スクリプトで渡されたパラメーターに応じて出力が表示されます。

私のスクリプト名はXYZ.ksh だとします。

今私の問題は、これらのスクリプトを使用したいユーザーが、このスクリプトをgrep、less、more、wcなどの他のシェルコマンドと組み合わせて使用​​したいということです.

通常はい、彼らは使用できます

XYZ.ksh | grep abc

しかし、私の場合、XYZ はユーザー名とパスワードの入力を求めているため、"|" は使用できません。その前に。永久にブロックします。

機能を実装する方法を知りたかっただけです。

私が試し たこと ユーザーが「| grep abc」のようなものを入力するユーザーから「その他のコマンド」の入力を取得しようとしましたが、スクリプトでこの入力を使用すると機能しませんでした。

4

5 に答える 5

0

この種の問題に対して一般的に使用される解決策は複数ありますが、どれも完璧ではありません。

  • 標準入力からパスワードを読み取ります。パイプでスクリプトを使用するのは非常に困難です。このメソッドは、パスワードの変更を扱うコマンドで使用されます: passwd,smbpasswd
  • コマンド ライン パラメーターでユーザー名とパスワードを指定します。このソリューションは、スクリプトをパイプで使用するのに適していますが、コマンド ラインは、たとえば次のように使用して、誰でも表示できますps -ef。これはmysqlhtpasswdsqlplus、 ...によって使用されます。
  • ユーザー名とパスワードを暗号化せずに、ユーザーのホーム ディレクトリのファイルに保存します。このソリューションはパイプでスクリプトを使用するのに適していますが、スクリプトは、ファイルが他のユーザーによって表示または変更可能かどうかを確認する必要があります。これはmysql
  • SSH で使用されるように、秘密鍵をローカル ファイルに保存し、公開鍵をリモート ファイルに保存します。これを正しく行う (または SSH に依存する) には十分な暗号化の知識が必要ですが、パイプでの使用には優れており、異なるマシン間でパイプを作成することさえできます!
  • パスワードを扱わず、ユーザーがシステムにログインしている場合、そのユーザーにはプログラムを実行する権利があると想定してください。誰がプログラムを使用できるかをフィルタリングするために、1 つのグループにのみ実行権限を与えることができます。これはsqlplus、Oracle、VirtualBox、一部の Linux ディストリビューションのゲームなどで使用されます。

セキュリティに関しては、システムは私が作成できるどのプログラムよりも確実に優れているため、私の推奨する解決策は最後のものです。

パスワードが他のサービスへのログインに使用される場合は、おそらくパスワードを含むプライベート ファイルを使用するでしょう。

于 2013-03-01T09:52:37.607 に答える
0

スクリプトでは、標準出力が端末に接続されているかどうかをテストして確認できます。

if [[ -t 1 ]]

そうすれば、出力がコンソールに表示されない場合にプロンプ​​トを抑制することができます。または、「その他のコマンド」ソリューションを使用して、名前付きパイプに接続されたコマンドを実行します。

于 2013-02-28T12:51:09.997 に答える
0

<<<次のように使用します。

XYZ.ksh <<< "your inputs" | grep abc
于 2013-02-28T11:33:58.273 に答える
0

使用できます(スクリプトでユーザー名とパスワードを読んでいると仮定しますread

(
    read -p "user:" USER
    read -p "pass:" PASS
) < /dev/tty > /dev/tty

そしてあなたは走ることができるでしょう

$ cmd | XYZ.ksh

ただし、他の回答には同意します。ユーザーとパスワードを要求せず、スクリプトに正しいアクセス許可を与えてアクセスを許可してください。

于 2014-08-26T20:08:04.987 に答える