公開鍵を使用せずに、SSH経由で接続し、パスワードを自動的に入力します


20

サーバーはSSH接続を許可しますが、公開鍵認証は使用しません。現時点ではこれを変更することは私の技術の範囲内ではありません(組織的な問題ではなく、技術的な問題のため)が、できるだけ早くそれを取得します!

私が必要となりましたことは、昔ながら使用して、サーバー上でコマンドを実行することで、アカウント+パスワードから認証をスクリプト。つまり、非インタラクティブな方法でそれを行う必要があります。出来ますか?そして、どうすればいいですか?

スクリプトを実行するクライアントはUbuntu Server 8.04を実行します。サーバーはCygwinおよびOpenSSHを実行します。


2
キーベースの認証を有効にすることの技術的な問題は何ですか?おそらく、代わりに、またはこの質問に加えて、その質問をする必要があります。
ゾレダチェ

1
私はそれを求めています。:-) serverfault.com/questions/125842/…しばらくの間、頭を叩いてきたので、今のところ脱出ルートが必要です。しかし、もちろん私の目標は、長期的に機能させることです。
削除

回答:


22

というlinuxユーティリティがありますsshpass。それはあなたが望むことを正確に行うことができ、コマンドライン引数として、またはファイルからサーバーパスワードを取得します(私はこの方法が好きなので、シェルパスワードにサーバーパスワードが表示されません)そのようです:

sshpass -f file_with_password ssh user@server ls -la

これにより、サーバーにsshが実行されますls -la。ただし、1つは、サーバーに手動でsshを実行する必要があるため(まだ実行していない場合)、サーバーがに追加されます~/.ssh/known_hosts。そうしないと、sshpass動作しません。


2
これはOpenSSHの標準的な部分ではなく、文字通り私のマシン(Mac OS X 10.7、Ubuntu 12.04、FreeBSD 8、Debian 3.1)のどれにもありません
...-voretaq7

@ voretaq7:sshpassはSourceForgeプロジェクトです:sourceforge.net/projects/sshpass
kevinarpe

1
@KCArpe私はあなたが私の論点を逃したと思います(「全世界はあなたの Linuxマシンではありません-他の場所で機能するソリューションを選んでみてください」)。SSH_ASKPASS変数の使用は、OpenSSHを備えたシステムで動作するより一般的なソリューションであり、追加のソフトウェアをインストールする必要はありません。一部の規制対象業界では、新しいソフトウェアをインストールすると多くの管理作業が発生します。
voretaq7

@ voretaq7を使用SSH_ASKPASSしても、すべてのシステムで機能するわけではありません。クライアントがサポートしていても、サーバーがを使用している場合は機能しませんkeyboard-interactiveauthorized_keysファイルを複数の組み込みマシンに配布するスクリプトを作成するときに、実際にその問題に直面しました。
カスペルド14

8

Expectを使用してこれを行うことができます。パスワードがプレーンテキストで含まれているスクリプトを使用する必要があるため、これはセキュリティの観点から明らかに望ましくありません。(しかし、あなたはあなたがあなたの質問であなたができるだけ早く公開鍵認証を使うことを計画していると言ったので、私はその点を酷使しません!)


これは私の問題を解決するようです!明日チェックします。これは最終的なソリューションではありませんが、ある程度のセキュリティを提供します。考えてみると、スクリプトユーザーがスクリプトの読み取りを許可されている唯一のユーザーである場合。その後、ファイルシステムのアクセス許可によって「のみ」保護される秘密鍵と同じくらい安全になります。または私は何かを見逃しましたか?
削除

明日は結果を返します。:-) 答えてくれてありがとう!
削除

うまくいくようです。しかし、この特定の場合、私見ではsshpassの方が簡単でした。
削除

7

使用するスクリプト言語に少し依存します。私は今、ほとんどすべてをPythonでスクリプト化していますが、これは問題ではありません。pysshとParamikoの両方を使用すると、パスワードを簡単にスクリプト化できます。

(ba)shスクリプトを使用してOpenSSHを使用する場合は、難しくなります。OpenSSHは、コマンドラインにパスワードを入力することを明示的に防止します(すべてのユーザーは、のようなものを使用してコマンドラインを表示できるためps -fe、これは悪いmojoです)。この場合、sshプログラムと直接対話する必要があり、2つのオプションがあります。

  • Expectのようなものを使用して、かなりの量のサポートコードを書くことができます。
  • SSH_ASKPASS変数を使用してハッキングを行い、パスワードを返すアプリケーションを呼び出して、端末から読み取れないようにすべてをバッチジョブとして実行するように指示します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.