私はそれを計算するので、私はssh経由で頻繁にアクセスしなければならないサーバーを持っています。さて、コンピュータセンターは(安全ではない)SSHキーを明示的に禁止します。彼らは、他の人間の前で可能な限り毎回キーボードで私のパスワードをタイプするのがはるかに安全なログイン方法であると感じます。
さて私は彼らの考えを変えることはできません(私が試した)。
SSHパスワードを少なくとも一時的に保存する方法、GITがパスワードを一定期間キャッシュに保存する方法はありますか?
SSHv2は同じ認証された接続が複数の「チャンネル」を確立することを可能にします - 対話型シェル、バッチコマンド、SFTP、そしてエージェント転送やTCP転送のような二次的なもの。ご使用のサーバーはおそらくデフォルトで接続多重化をサポートしています。 (あなたの管理者が文句を言っても、それはどこにもあなたのパスワードをキャッシュしていません - それは全体の接続をキャッシュしています。)
OpenSSHではこれを利用するためにControlMaster
とControlPath
オプション(-Mと-S)があります。
-M
を使用して「マスター」SSH接続を開始します。 (まだ設定にControlPathがないので、-S
を使ってコマンドラインでそれを指定する必要があります。それは長く生きる必要があるので、私はバックグラウンドに落とすために-fN
オプションを追加します。
$ ssh [email protected] -fNMS ~/.ssh/bar.socket
[email protected]'s password:
あなたはローカルのShellに戻りました。
マスターを介して新しい接続を開始します。
$ ssh [email protected] -S ~/.ssh/bar.socket
君も仲間だ。
これをGit/rsync/SFTPに役立つようにするためには、あなたの設定でControlPath
を設定する必要があります。なぜなら、いつも-S
を指定することはできないからです。
Host *
ControlPath ~/.ssh/S.%r@%h:%p
あなたはこれを自動化することができます - 最近のOpenSSHのバージョンにもControlPersist
があり、まだなければバックグラウンドで自動的にマスター接続を確立します。これにより、ステップ1をスキップして、通常どおりsshを使用することができます。
~/.ssh/config
での設定:
Host *
ControlPath ~/.ssh/S.%r@%h:%p
ControlMaster auto
ControlPersist 15m
最初の接続はパスワードを要求します。
$ ssh [email protected]
[email protected]'s password:
[foo@bar:~]$ exit
第二はしません:
$ ssh [email protected]
[foo@bar:~]$ yay
マルチプレックスマスターを制御する(停止するかTCP転送を設定する)には、-O
オプションを使用します。
同様の方法が 最近のPuTTYバージョン でサポートされています。
sshpass
を使うsshpass( github 、 のmanページ )は自動的に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の回答は、パスフレーズと秘密鍵のキャッシュによるpubkey authの代替手段と考えることができます(例:ssh-agent
)。それから私の答えは、秘密鍵ファイルにパスフレーズを付けずにpubkey authに代わるものになるでしょう。
パスワードマネージャを使用してください。
一部のパスワードマネージャ(例:KeePassXC)は '自動入力'機能を持っています。パスワードをパスワードマネージャに保存し、マネージャの実行時にデータベースのロックを解除し、ssh
がパスワードの入力を要求するたびに、パスワードマネージャが長いパスワードをコンソールに書き込むようにするキーの組み合わせを押す。
(データベースをロック解除するためのパスワードを除いて)コピーする必要はなく、何でも覚えていて、あなたがログインしようとするたびにそれらの30文字をマッシュすることなく強いパスワードを持つことができます。
あなたはこのリストからあなたのお気に入りを選ぶことができます: https://en.wikipedia.org/wiki/List_of_password_managers
もう1つの方法はGUI SSHクライアントを使用することです。 Windowsでは、明らかな選択は PuTTY です。 Linux版のPuTTYもあります。特に、UbuntuのようなDebianベースのほとんどのディストリビューションでは、通常そのリポジトリにPuTTYが含まれています。
他の本当に良いクライアントは Termius です。 WindowsやLinuxだけでなく、OSX、iOS、Androidもサポートしています。それは主に携帯電話用に設計されていますが、デスクトップ版は実際にはかなり良いです。
私が間違えていないのであれば、Windows上の由緒あるHyperterminalにもsshクライアントが組み込まれていましたが、私は長い間Windowsを使っていなかったので、私は完全に確信が持てません。
すべてのGUIクライアントには、ユーザー名とパスワードを含む接続設定を保存する機能があります。