シェルスクリプトでパスワードを渡すことは可能ですか?


11

私はこれを長い間探していますが、シェルスクリプトでパスワードを渡すことは可能ですか?回答の多くはノーで返されました。最近、シェルスクリプトでパスワードを渡す方法に関する記事を読みました。私はそれを試してみましたが、うまくいかないようです。これがリンクです。誰でもチェックアウトして元に戻すことができますか?また、私はシェルスクリプトでパスワードを渡す方法があると言っていますか?linuxがパスワードの入力を取得する方法を教えてくれない場合は?

回答:


12

「パスワードを入力する」とは、ユーザーに表示されずにデータを入力することを意味します。

bashのを使用する場合は、あなたが使用することができます(geirhaによって提案された)-sが表示されてから入力された文字を防ぐために、オプションを:

read -p "Password please: " -s pass

または、ターミナルの動作を変更して、入力した文字を非表示にしますstty -echo(無効にするecho)。シェルに組み込まれたパスワードをread変数に読み込んだ後(下の例では$pass)、で再び有効にしstty echoます。からの新しい行Enterは隠されているため、新しい行で将来の出力を得るには、新しい行を印刷する必要があります。

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

readそしてprintfビルトインをシェルしています。デフォルトでインストールされるパッケージsttyによって提供coreutilsされます。つまり、このスニペットは非常にポータブルです。

注:この-pオプションは標準ではありませんが、からbashです。他のシェルでプロンプトを表示する必要がある場合は、次を使用します。

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

参照:


スクリプトでリモートシステムのルートパスワードを指定したいだけです。あなたの場合は可能ですか?
karthick87

@ karthick87:いいえ、このスクリプトはユーザーが対話的に入力するデータをキャプチャするだけです。スクリプトにルートパスワードを入れたい場合、キーベースのログインを検討してみませんか?
-Lekensteyn

1
Bashの読み取りには、行の読み取り中にエコーを無効にするオプションもあります。をご覧くださいhelp '\read'
ガイラ

zshそれを介して達成されread -s 'pw?Prompt text'pwパスワードは変数配置されるとされている-s非表示入力するフラグです。
ハゲ

2

どのプログラムにパスワードを渡しますか?

リンクのスクリプトは私のために機能します。これはシェルスクリプトではなく、期待されるスクリプトであることに注意してください(パッケージexpectをインストールする必要があります)。expectは、テキストベースのインタラクティブプログラムを自動化する一般的な方法です。

非対話型sshログインは、多くの場合、空のパスフレーズを使用したキーベースの認証を使用して行われます。

他の一部のプログラム(などsudo)には、stdinからパスワードを読み取るオプションがあります。

コマンドラインオプションとしてパスワードを提供することは多くの場合、セキュリティ上の問題です。ほとんどのシステムでは、などの単純なツールを使用して、コマンドライン引数を含む他のユーザープロセスを見ることができますps


パスワードをsshプログラムに渡したいだけです。
karthick87

したがって、キー認証があなたのために機能する可能性があります:ssh-keygen認証キーを作成するために使用し(パスフレーズを求められたらEnterを押すだけ)、それを使用してリモートユーザーにそれをコピーしますssh-copy-id。パスワードを聞かないでください。
フロリアンディーシュ

1

スクリプトが実際にパスワードを処理することはありません。パスワードが必要なアプリケーションにパスワードを要求するか、それが不可能な場合は、アプリケーションで認証するためのより良い手段を見つけてください。http://mywiki.wooledge.org/BashFAQ/069をお読みください


0

bashスクリプトにパスワードを保存する方法はありますが、スクリプトを暗号化して誰も実際に読み取れないようにするか、あらゆる種類のデバッガーを実行して、スクリプトの動作を正確に確認する必要があります。bash / shellスクリプトを暗号化して実際に実行可能にするには、ここにコピーして貼り付けてみてください

上記のページで、あなたがしなければならないことは、あなたのスクリプトを提出することです(あなたの安心のために最初にサンプルスクリプトを提出できます)。zipファイルが生成されます。ダウンロードリンクを右クリックし、提供されたURLをコピーします。次に、UNIXボックスに移動して、次の手順を実行します。

インストール:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

上記のインストールコマンドが行うことは次のとおりです。

  1. 暗号化されたスクリプトをディレクトリにインストールします/var/tmp/KINGLAZY/SHIELDX-(your-script-name)

  2. この暗号化されたスクリプトへのリンクは、代わりに指定するディレクトリに配置されます/home/(your-username)-そのようにすると、絶対パスを入力しなくてもスクリプトに簡単にアクセスできます。

  3. 誰もスクリプトを変更できないことを確認します-暗号化されたスクリプトを変更しようとすると、その操作が停止または削除されるまで、スクリプトは動作不能になります。

  4. 誰も絶対にコピーできないようにします。誰もあなたのスクリプトを人里離れた場所にコピーして、それがどのように機能するかを見るためにそれをいじってみることはできません。スクリプトのすべてのコピーは、インストール中に指定した元の場所へのリンクである必要があります。

注意:

ユーザーに応答を促す対話型スクリプトではこれが機能するとは思わない。値はスクリプトにハードコーディングする必要があります。暗号化により、誰も実際にそれらの値を見ることができないようになりますので、心配する必要はありません。


-1

このようなことを簡単に行うことができます。

# echo -e "password_here\npassword_here" | su user

ソース

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.