私は現在、古いSSHキーをサーバーにアップロードしました。問題は、(元の~/.ssh
およびid_rsa
ファイルと共に)id_rsa.pub
ディレクトリを失ったことです。
そのため、サーバー上で古いSSHキーを直接削除し、新しいものをアップロードする必要があります。
私は成功せずに次のコマンドを試してみました:
$> ssh-add -D
SSHキーを完全に削除する方法はありますか?
ssh-add -d/-D
notキーの削除について、少なくとも2つのバグ報告があることに注意してください。
ssh-add -D
がgnome-keyring-daemon
メモリからSSHキーを削除しないssh-add -D
は動作しません。また、なぜすべてのアイデンティティが自動追加されるのですか? "正確な問題は、
ssh-add -d/-D
はgnome-keyringから手動で追加されたキーのみを削除します。
自動的に追加されたキーを削除する方法はありません。
これは最初のバグです。まだ存在しています。したがって、たとえば、2つの異なるGitHubアカウントに関連付けられた2つの異なる自動ロードされたssh IDがある場合(職場用と自宅用など)、no wayに切り替えます。それらの間の。 GitHubは最初にマッチしたものを取るので、あなたはいつもGitHubにあなたの「ホーム」ユーザーとして現れ、仕事のプロジェクトにものをアップロードする方法はありません。
ssh-add -d
をautomatic-loadedkeys(およびssh-add -t X
に自動ロードされたキーの有効期間を変更する)に適用すると、ほとんどのユーザーが期待する動作に戻ります。
より正確には、問題について:
原因は
gpg-keyring-daemon
です。
- それはssh-agentの通常の操作を覆します、大抵それはあなたが暗号化されたsshキーのためのパスフレーズをタイプすることができるきれいなボックスをポップアップすることができるようにちょうどそのようにします。
- そしてそれはあなたの
.ssh
ディレクトリを通って進み、見つけたキーをあなたのエージェントに自動的に追加します。- そしてそれはあなたがそれらのキーを削除させないでしょう。
どうしてこれが嫌いですか?方法を数えないでください - 人生は短すぎます。
新しいsshクライアントは、ホストに接続するときにssh-agentのすべてのキーを自動的に試すので、失敗は複雑になります。
多すぎる場合、サーバーは接続を拒否します。
そして、gnome-keyring-daemonはあなたが自分のssh-agentに何個の鍵を持たせたいかを決め、それらを自動ロードしたので、それらを削除してはいけません。
このバグはUbuntu 14.04.4でもまだ2日前(2014年8月21日)に確認されています
考えられる回避策:
- 手動で追加したキーをすべて削除するには、
ssh-add -D
を実行します。これは自動的に追加されたキーもロックしますが、gnome-keyring
を実行しようとするとgit Push
がキーのロック解除を要求するので、あまり役に立ちません。~/.ssh
フォルダに移動して、識別したいもの以外のすべての重要なファイルをbackupという別のフォルダに移動します。必要に応じて、タツノオトシゴを開けてそこから鍵を削除することもできます。- これで、問題なく
git Push
を実行できるはずです。
別の回避策:
本当にやりたいことは、
gpg-keyring-daemon
を完全にオフにすることです。System --> Preferences --> Startup Applications
に行き、「SSH Key Agent (Gnome Keyring SSH Agent)
」ボックスの選択を解除します - それを見つけるには下にスクロールする必要があります。それでも
ssh-agent
を取得することができますが、今は正常に動作します。キーの自動ロードはありません。キーを追加するためにssh-addを実行します。キーを削除する場合は可能です。想像してみろ。
このコメント は実際に次のことを示唆しています。
解決策は、
gnome-keyring-manager
が起動しないようにすることです。これは、プログラムファイルの実行権限を削除することによって最終的に達成されるため、奇妙に困難でした。
私が誤解しない限り、あなたはあなたのローカルマシン上のあなたの秘密鍵を含んでいるあなたの.ssh
ディレクトリを失ったので、あなたはサーバー上にありそして鍵ベースのログインを許可した公開鍵を削除したいです。その場合は、サーバー上のホームディレクトリの.ssh/authorized_keys
ファイルに保存されます。このファイルをテキストエディタで編集して、識別できる場合は関連する行を削除するだけです(唯一のエントリであればさらに簡単です)。キーがサーバーへの唯一のアクセス方法ではなかったこと、そしてログインしてファイルを編集する方法が他にあることを願います。手動でauthorised_keys
ファイルに新しい公開鍵を追加するか、ssh-copy-id
を使用することができます。どちらの方法でも、サーバー上のアカウントにpassword authを設定するか、サーバー上のauthorized_keys
ファイルにアクセスするための他のIDまたはアクセス方法が必要になります。
ssh-add
はあなたのsshエージェントにあなたのアイデンティティの管理をローカルに処理する「sshエージェント」へのアイデンティティを追加します、そして「エージェントへの接続はSSHリモートログインを通して転送されます。 (manページ)、だから私はそれがこの場合あなたが望むものだとは思わない。私の知る限りではsshログインを介してサーバーにアクセスすることなく公開鍵をサーバーに取得する方法はありません。
Unityで "Passwords and Keys"アプリケーションを開いて、セキュアキー - >OpenSSHキーから不要なキーを削除しましたそしてそれらは自動的にssh-agent -lからも削除されました。
Ssh関連の操作を実行しようとしていて次のエラーが発生した場合:
$ git fetch
no such identity: <ssh key path>: No such file or directory
次のようにして、不足しているsshキーをsshエージェントから削除できます。
$ eval `ssh-agent -s` # start ssh agent
$ ssh-add -D <ssh key path> # delete ssh key
このバグはまだUbuntu 19.04に存在することを確認できます。 @VonCによって提案された回避策は完全に機能し、私のバージョンを要約しています。
次にssh-add -D
を再試行し、再起動後ssh-add -l
が私に言ったエージェントにはIDがありません。ssh-agent
デーモンがまだあることを確認しましたps aux | grep agent
で実行しています。そこで、GitHubで最も頻繁に使用するキー(ssh-add ~/.ssh/id_ecdsa
)を追加しましたが、すべてうまくいきました!
これで、最も頻繁に使用するリポジトリで通常の操作を実行できます。RSAキーを使用する他のリポジトリへのアクセスが必要な場合は、export GIT_SSH_COMMAND="ssh -i /home/me/.ssh/id_rsa.pub"
で1つのターミナルを専用にします。解決しました!バグと解決策を指摘した功績は@VonCにあります。