パスワードをスクリプトに渡す

パスワードをスクリプトに渡す

scpリモートホストにファイルを送信し、そのファイルに対してコマンドを実行してリモートセッションを終了したいと思います。scpthenを呼び出す一般的なスクリプトを作成すると、ssh2つのパスワードを入力するように求められます。ssh単一のパスワードを使用してリモートコンピュータからコマンドをコピーして実行する方法はありますか?

また、パスワードを入力するためにユーザーと対話する必要があるスクリプトをどのように作成しますか?

安全ではないので、「読書」を使用したくありません。私の秘密鍵ファイルが漏洩する可能性があるため、パスワードレスを使用したくありませんssh。これはさらに悪化します。 「期待」についての内容を読みましたが、それが正しいツールであるかどうかはわかりません。

答え1

私の秘密鍵ファイルが破損する可能性があるため、パスワードのないSSHを使用したくありません。これはさらに悪化します。

いいえ、これは間違っています。秘密鍵ファイルは、パスワードよりも強力なセキュリティを提供します。秘密鍵ファイルを使用します。秘密鍵ファイルはパスワードで暗号化されます。誰かがキーファイルを取得しても、まだパスワードが必要です。パスワード認証を使用すると、パスワードを知っている人は誰でも逃げることができます。

ssh-agentセッション中に実行されます。特定のキーを使用する前にパスワードを入力しますssh-add(または一部のGUIでプロンプトが表示されます)。これにより、このキーを使用して接続するとメッセージが表示されなくなります。

答え2

1つのパスワードを使用してリモートシステムからコマンドをコピー、ssh、および実行する方法はありますか?

2つのアプローチがあり、それぞれ異なる利便性と長所と短所があります。

一つは、ファイルをインラインで転送することです。ファイル内容以上の入力が必要ですか?そうでない場合は、ssh example.com 'cat > the_file ; process the_file' < the_file必要に応じて機能します。

もう1つの方法は、SSH接続を再利用することを行うことです。 ControlMasterそしてSSHの友達が役に立つかもしれません。ssh_config(1)詳細を表示したり、役立つ可能性のあるさまざまなプログラミング言語のSSH実装またはさまざまなラッパーがあります。

また、パスワードを入力するためにユーザーと対話する必要があるスクリプトをどのように作成しますか?

TTYから読みます。一般に、最良の戦略は、ssh が邪魔されずにユーザーと直接対話できるようにすることです。このように相互作用するための実装は、よりよくテストされ実証されたためです。

安全ではないので、読み取りを使用したくありません。

ユーザー対話のためだと思います。現実的には、セキュリティの観点から、これはSSHに要求することと基本的に違いはありませんが、邪魔にならない方が最善です。

私の秘密鍵ファイルが破損する可能性があるため、パスワードのないSSHを使用したくありません。これはさらに悪化します。

...そして同じ理由でSSHプロキシは許可されていないと思います。

答え3

要件を表現するために「expect」を使用することが可能であり、一部の人々はまだそれを使用しています。 Expect スクリプトはコマンド出力を「キャプチャ」でき、出力に基づいて「応答」できます。スクリプトは次のとおりです。

spawn scp some_file user@host:/destination
expect "*?assword:*"
send -- "Your Super Secret Password Here\r"
send -- "\r"

もちろんこれはうまくいきますが、別の問題を引き起こします。あなたのパスワードはプレーンテキストで保存され、このファイルを読んでいる人全員に公開されます。

私の個人的な意見は、最も安全で非対話型の方法は秘密鍵認証であるということです。

答え4

キーを使用できますが、sshシェルが実際のシェルではなく実行するコマンドに設定されているリモートシステムのカスタムユーザーにキーを割り当てます。その結果、ログインするとコマンドが実行され、端末が閉じます。したがって、パスワードが破損した場合は、対話形式でコマンドを入力できず、一連のコマンドのみをシェルとして実行できます。

関連情報