SSHキーが禁止されている場合、パスワードをキャッシュします


46

私はそれを計算するため、sshを介して頻繁にアクセスする必要があるサーバーがあります。現在、コンピューティングセンターはSSHキーが「安全でない」ため明示的に禁止しています。彼らは、他の人間の前で可能な限りキーボードで私のパスワードを入力する方がはるかに安全なログイン方法であると感じています。

今; 私は彼らの心を変えることはできません(私は試しました)。

少なくとも一時的にSSHパスワードを保存する方法はありますか?GITが定義された時間キャッシュにパスワードを保存する方法はありますか?


55
the computing center explicitly forbids SSH-keys because they are "insecure"-問題に関する私の意見は?あなたのホストは明らかに不適切なので、新しいサーバーホストを見つけます。
マットクラーク

18
@Mattは:持っていない多くの学術グリッドシステムのような「コンピューティングセンター」の音は、ほぼずっと競争と私は推測
grawity

27
彼らは間違ってる。彼らはおそらくアカウントの有効期限が切れたときにsshキーを無効にすることを忘れていたので、sshキーが問題であると判断しました。
ジョシュア

10
悲しみは正しい。それは全国的なスーパーコンピューターなので、私はそれにこだわっています。それが価値があるもののために、マシンは素晴らしいです。ジョシュアもおそらく正しいかもしれませんが、それは何にも良くない種類の権利
です-user2667180

7
@TheHansinatorキーロガーがインストールされている場合、ssh接続を保護しているかどうかが問題にならない程度まで既に侵害されています。しかし、publickey認証には他の利点もあります。passwordサーバーで認証を無効にすると、これらの攻撃者全員がパスワードを推測しようとするのを防ぎます。また、攻撃者が以前にサーバーの公開キーを保存していないクライアントに対してmitm攻撃を試みると、認証publickeyを使用passwordする場合よりもはるかに保護されます。
カスペルド

回答:


63

接続の再利用

SSHv2では、同じ認証された接続で複数の「チャネル」を確立することができます-インタラクティブシェル、バッチコマンド、SFTP、およびエージェント転送やTCP転送などのセカンダリ接続。サーバーはおそらくデフォルトで接続の多重化をサポートしています。(管理者が文句を言う場合、パスワードをどこにもキャッシュしません。接続全体をキャッシュします。)

OpenSSHにはControlMasterControlPathこれを利用するためのオプションとオプション(-Mおよび-S)があります。

  1. を使用して「マスター」SSH接続を開始し-Mます。(設定にControlPathがまだないので、コマンドラインで指定する必要があります-S。長く使用する必要があるため-fN、バックグラウンドにドロップするオプションを追加します。それ以外の場合は技術的にオプションです。)

    $ ssh foo@bar.example.com -fNMS ~/.ssh/bar.socket
    foo@bar.example.com's password:
    

    ローカルシェルに戻ります。

  2. マスターを介して新しい接続を開始します。

    $ ssh foo@bar.example.com -S ~/.ssh/bar.socket
    

    君も仲間だ。

  3. これをGit / rsync / SFTPでControlPath使用するには、-S常に指定することができないため、構成でセットアップする必要があります。

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
    

これを自動化できます。最新のOpenSSHバージョンにはControlPersist、マスター接続がまだない場合にバックグラウンドで自動的に確立するものもあります。これにより、ステップ1をスキップして、通常どおりsshを使用できます

  1. 構成~/.ssh/config

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
        ControlMaster auto
        ControlPersist 15m
    
  2. 最初の接続はパスワードを要求します:

    $ ssh foo@bar.example.com
    foo@bar.example.com's password:
    [foo@bar:~]$ exit
    
  3. 2番目はそうではありません:

    $ ssh foo@bar.example.com
    [foo@bar:~]$ yay
    

マルチプレックスマスターを制御(停止またはTCP転送を構成)するには、-Oオプションを使用します。

同様の方法が最近のPuTTYバージョンでサポートされています


1
このいい答えをありがとうございました。googleは常にssh-keysを使用しており、適切なキーワードがわからなかったため、この問題では役に立ちませんでした。私を大いに助けてくれました!
user2667180

1
言うまでもありませんが、この構成を使用する場合は、アカウントがセキュリティで保護されていることを確認し、そのマシンのチャネルファイルへのアクセス権を持つすべてのユーザーがあなたの接続し、サーバーにアクセスします。
シェルスター

3
@shellster:すでにssh-agentの場合と同様に、「同じUIDを持つ人」を意味します。ソケットファイルのアクセス許可(既定では0600)を意図的に開いた場合でも、他のユーザーは "多重uidの不一致"を取得します。
悲しみ

3
@shellster rootを持っている人は、キーロガーをインストールし、とにかくリモートシステムにパスワードを盗むことができます。ローカルルートが心配な場合は、SSH秘密キーを保存するのと同じくらい安全です。
アマロイ

1
ローカルルートが脅威になるとは思いません。なぜなら、それが脅威になったとしても、あなたは何をしても乾杯するからです。(政府レベルのスパイと同様。)率直に言って、ローカルルートは、sshクライアント ssh-agentを必要なものに置き換えることができます。すべてのパスワードと秘密鍵を/root/.secretに保存しますか?承知しました。
荒廃

19

つかいます sshpass

sshpass(githubman page)は、パスワードを自動的にsshに送信するツールです。安全な使用方法は次のとおりです。

% echo 'correct horse battery staple' > ~/.ssh/compute_password
% chmod go-rw ~/.ssh/compute_password

% sshpass -f ~/.ssh/compute_password ssh foo@host

これは、~/.ssh/compute_passwordパスフレーズなしの秘密鍵ファイルのように、からパスワードを読み取ります。sshpassコマンドを小さなシェルスクリプトまたはシェルエイリアスに入れて、完全なコマンドを入力しないようにすることができます。悲しいことに、私はからこれを行う方法を見つけていません~/.ssh/config

(コマンドラインでに直接パスワードを指定することも可能ですが、できる人にはパスワードsshpassが漏洩するため、これは避けるべきですps

他の方法との比較

もちろん、このアプローチは公開鍵認証を適切に設定するよりも安全性は低くなりますが、おそらく既に知っています。

また、接続の再利用に関する@grawityの回答よりも安全性は低くなりますが、パスワードをインタラクティブに入力する必要がないという利点があります。

@grawityの答えは、パスフレーズと秘密キーキャッシング(つまりssh-agent)を使用したpubkey authの代替と考えることができます。私の答えは、秘密鍵ファイルにパスフレーズなしでpubkey認証に代わるものです。


3
コンピューティングセンターのポリシーが「キーペアは誰かが盗むことができるディスクに保存されている!」に基づいて作成された場合、そのポリシーはむしろ裏目に出そうです。
悲しみ

6
@grawityまあ、悪いポリシーはさらに悪い回避策につながります¯\ _(ツ)_ /
¯– marcelm

1
パスワードをランダムな文字の十分な長さのストリーム(head -c 16 /dev/urandom | base64128ビットなど)として生成し、他のシステムで使用しない場合、セキュリティ上はキーに似ています。総当たり攻撃が難しく、暗号化されていなければファイルから簡単に使用できます。彼らがファイルを取得する場合、これは悪者にも当てはまります。唯一の違いは、パスワードがそのままサーバーに送信されることです。一方、キーには、公開することなく正しい秘密キーを所有していることを証明するためのより良い数学があります。標準ツール)。
-ilkkachu

1

パスワードマネージャーを使用します。

一部のパスワードマネージャー(例:KeePassXC)には「自動入力」機能があります。パスワードをパスワードマネージャーに保存し、マネージャーを実行するときにデータベースのロックを解除し、パスワードのssh入力を求めるたびにキーの組み合わせを押すと、パスワードマネージャーが長いパスワードをコンソールに書き込みます。

コピーする必要はありません。データベースのロックを解除するためのパスワードを除き、何も覚えていない必要があります。また、ログインしようとするたびにこれらの30文字を破壊することなく強力なパスワードを使用できます。

このリストからお気に入りを選択できます:https : //en.wikipedia.org/wiki/List_of_password_managers


3
自動タイプ機能が端末ベースのプログラムでうまく機能するかどうかはわかりません。検出は特定のウィンドウタイトルを探します。オートタイピング自体には、KeePass2にあるような「アンチキーロギング」機能はありません
。...-grawity

1
@grawity gnome-terminalは、ssh somehostssh からパスワードを要求されたときにタイトルを変更するため、問題なくタイトルウィンドウをこれと一致させることができます。「アンチキーロギング」機能については何も知りません-ターミナルでKeePassXCを毎日使用していますが、最悪の場合、リストから適切なアカウントを選択する必要があります。
発泡スチロールフライ

2
@grawityアンチキーロギング機能は、とにかくエントリごとに有効にする必要があります(多くのプログラムが貼り付けをサポートしていないためです)。
ボブ

0

別の方法は、GUI sshクライアントを使用することです。Windowsでは、当然の選択はPuTTYです。PuTTYのLinuxバージョンもあります。特に、UbuntuのようなほとんどのDebianベースのディストリビューションには、通常リポジトリにPuTTYが含まれています。

別の本当に良いクライアントはTermiusです。WindowsとLinuxだけでなく、OSX、iOS、Androidもサポートしています。主に携帯電話向けに設計されていますが、デスクトップ版は実際には非常に優れています。

誤解しない限り、Windowsの由緒あるHyperterminalにもsshクライアントが組み込まれていましたが、非常に長い時間Windowsを使用していなかったため、完全には定かではありません。

すべてのGUIクライアントには、ユーザー名とパスワードを含む接続設定を保存する機能が含まれています。


2
「GUIベース」は、PuTTYが明示的に拒否しているパスワードの保存を許可することを自動的には意味しません。WindowsにバンドルされているHyperTerminalのバージョンはTelnet専用で、シリアルリンクに重点を置いていました。おそらく、SSHをサポートするCKermit for Windowsを考えているかもしれませんが、その暗号サポートは古く、多くの現在のサーバーに簡単に接続できません。
荒廃
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.