web-dev-qa-db-ja.com

クリアテキストパスワードをパラメーターとして使用したSSHログイン?

Ubuntuを実行しているリモートホストで作成したユーザーにログインする必要があります。 sshキーを使用できません。sshログインは、アクセスできないサーバー(Bambooなどの継続的インテグレーションサーバー)内で実行されるbashスクリプトから行われるためです。

これは理想的な方法ではないことを理解していますが、パスワードを要求しないようにリモートホストを設定するか、MySQLがログインに使用できるようなssh --passsword foobar user@Hostなどでログインできるようにしたいのです。

私はこれをman sshで見つけることができず、この問題を回避するための代替手段を用意しています。

93
mmla

Ubuntuでsshpassパッケージをインストールし、次のように使用します。

sshpass -p 'YourPassword' ssh user@Host

sshpassは、ファイルまたは環境変数からキーボードインタラクティブパスワードを渡すこともサポートしています。これは、セキュリティが関連する状況では、より適切なオプションとなる場合があります。見る - man sshpass 詳細については。

160
likeitlikeit

スクリプト、sshコマンドライン、またはプレーンテキストファイルにパスワードを入力する方法がある場合、あなたは[〜#〜] much [〜 #〜]代わりにsshキーを使用することをお勧めします。どちらの方法でも、sshクライアントスクリプトが保存されているアカウントにアクセスできるユーザーであれば、それを使用してサーバーにアクセスできますが、少なくともsshキーの場合は、 OpenSSHはそれを適切にサポートしています。ssh以外の方法でアクセス権を付与する必要はありません。必要に応じて、簡単に取り消すことができます。

Sshキーを使用しないという要件がある理由を説明する必要があります。

強制コマンド(command="..." の中に .ssh/authorized_keys file)を使用すると、クライアントは、完全なシェルではなく、サーバー上で必要なコマンドを実行するためのアクセス権のみを持つことができます。

16
Celada

まず、他の回答者と同様に、sshキーを使用することをお勧めします。ただし、サーバーを制御する人は、sshキー認証の使用を許可しないため、パスワード認証を使用する必要があると想定します。

ControlMasterとControlPathを使用できます。

Aをアクセス権のないサーバー(Bambooのような継続的インテグレーションサーバーと考えてください)とし、CをUbuntuを実行するリモートホストとします。

ここで、Bをユーザーが制御するコンピューターとします。適切なBコンピュータを提供できない場合、この回答は機能しません。

  1. 鍵ペアを作成し、公開部分をBのauthorized_keysファイルに追加します。 Aに秘密鍵を渡します。これで、パスワードなしでAからBにログインできます。
  2. Bで手動でssh -M -S /tmp/controlpath Cと入力し、プロンプトでパスワードを入力します。その後、パスワードなしでAからCにログインできるはずですssh -S /tmp/controlpath C

Aのスクリプトでは、ssh B ssh C dostuff

Bを再起動するたびに、接続を再確立する必要がありますssh -M -S /tmp/controlpath C

10
emory