Làm thế nào để loại bỏ một khóa ssh?


154

Tôi hiện có một khóa SSH cũ được tải lên trên một máy chủ. Vấn đề là tôi bị mất ~/.sshthư mục của tôi (với bản gốc id_rsaid_rsa.pubcác tập tin).

Do đó, tôi muốn xóa khóa SSH cũ trực tiếp trên máy chủ và tải lên một khóa mới.

Tôi đã thử lệnh sau mà không thành công:

$> ssh-add -D

nhập mô tả hình ảnh ở đây

Có cách nào để loại bỏ hoàn toàn khóa SSH không?


Làm gì với ssh-add -d?
dùng2196728

5
chết tiệt, đó là ssh-add -D, chữ hoa
Alexander Mills

Kiểm tra ổ cắm của bạn đang được sử dụng bởi đại lý ssh của bạn (1).
Dwight Spencer

Câu trả lời:


129

Lưu ý rằng có ít nhất hai báo cáo lỗi về việc ssh-add -d/-D không xóa khóa:

Vấn đề chính xác là:

ssh-add -d/-Dchỉ xóa các khóa được thêm thủ công khỏi gnome-keyring.
Không có cách nào để xóa các phím được thêm tự động.
Đây là lỗi ban đầu và nó vẫn còn tồn tại.

Vì vậy, ví dụ: nếu bạn có hai danh tính ssh được tải tự động khác nhau được liên kết với hai tài khoản GitHub khác nhau - nói cho công việc và cho gia đình - không có cách nào để chuyển đổi giữa chúng. GitHubtakes người đầu tiên phù hợp, vì vậy bạn luôn xuất hiện với tư cách là người dùng 'nhà' của mình với GitHub, không có cách nào để tải mọi thứ lên các dự án công việc.

Cho phép ssh-add -dáp dụng cho các khóa được tải tự động (và ssh-add -t Xđể thay đổi tuổi thọ của các khóa được tải tự động), sẽ khôi phục hành vi mà hầu hết người dùng mong đợi.


Chính xác hơn, về vấn đề:

Thủ phạm là gpg-keyring-daemon:

  • Nó thay thế hoạt động bình thường của ssh-agent, chủ yếu chỉ để nó có thể bật lên một hộp đẹp mà bạn có thể nhập cụm mật khẩu cho khóa ssh được mã hóa.
  • Và nó lướt qua .sshthư mục của bạn , và tự động thêm bất kỳ khóa nào nó tìm thấy cho đại lý của bạn.
  • Và nó sẽ không cho phép bạn xóa các phím đó.

Làm thế nào để chúng ta ghét điều này? Chúng ta đừng đếm đường - cuộc đời quá ngắn ngủi.

Lỗi được kết hợp bởi vì các máy khách ssh mới hơn sẽ tự động thử tất cả các khóa trong tác nhân ssh của bạn khi kết nối với máy chủ.
Nếu có quá nhiều, máy chủ sẽ từ chối kết nối.
Và vì gnome-keyring-daemon đã tự quyết định có bao nhiêu khóa bạn muốn ssh-agent của bạn có, và đã tự động tải chúng, VÀ KHÔNG ĐƯỢC BẠN XÓA BEMNG BẠN, bạn sẽ nướng.

Lỗi này vẫn được xác nhận trong Ubuntu 14.04.4, gần đây như hai ngày trước (ngày 21 tháng 8 năm 2014)


Một cách giải quyết có thể:

  • Làm ssh-add -Dđể xóa tất cả các phím được thêm bằng tay của bạn . Điều này cũng khóa các khóa được thêm tự động, nhưng không được sử dụng nhiều vì gnome-keyringsẽ yêu cầu bạn mở khóa bằng mọi cách khi bạn thử làm một git push.
  • Điều hướng đến ~/.sshthư mục của bạn và di chuyển tất cả các tệp chính của bạn ngoại trừ tệp bạn muốn xác định vào một thư mục riêng gọi là sao lưu. Nếu cần bạn cũng có thể mở cá ngựa và xóa các phím từ đó.
  • Bây giờ bạn sẽ có thể làm git pushmà không có vấn đề.

Một cách giải quyết khác:

Những gì bạn thực sự muốn làm là tắt gpg-keyring-daemonhoàn toàn.
Truy cập System --> Preferences --> Startup Applicationsvà bỏ chọn SSH Key Agent (Gnome Keyring SSH Agent)hộp "" - bạn sẽ cần cuộn xuống để tìm nó.

Bạn vẫn sẽ nhận được một ssh-agent, chỉ bây giờ nó sẽ hoạt động hoàn toàn: không có khóa nào được tự động tải, bạn chạy ssh-add để thêm chúng và nếu bạn muốn xóa khóa, bạn có thể. Tưởng tượng rằng.

Nhận xét này thực sự gợi ý:

Giải pháp là giữ cho gnome-keyring-managerkhông bao giờ bắt đầu, điều khó khăn cuối cùng đã đạt được bằng cách loại bỏ quyền thực thi của tệp chương trình.


Ryan Lue thêm một trường hợp góc thú vị khác trong các ý kiến :

Trong trường hợp điều này giúp được bất cứ ai: Tôi thậm chí đã cố gắng xóa hoàn toàn các tệp id_rsaid_rsa.pubtệp và khóa vẫn hiển thị.

Hóa ra gpg-agentlà lưu trữ chúng trong một ~/.gnupg/sshcontroltập tin ; Tôi phải tự xóa chúng từ đó.

Đó là trường hợp khi cáckeygrip đã được thêm vào như ở đây .


1
Một tùy chọn khác trong Ubuntu 14-16 là sử dụng gui 'Mật khẩu và khóa' (bạn có thể tìm kiếm ssh để tìm nó). Chọn ví dụ: các phím OpenSS, sau đó nhấp chuột phải vào phím và chọn xóa. Bạn có thể cần phải khởi động lại hệ thống của mình để thấy nó bị xóa.
dùng3257693

2
Tại sao thông tin này về ssh-agentssh-addcâu trả lời được chọn? Các poster ban đầu cho biết ông muốn remove the old SSH key directly on the server and upload a new one. Nghe có vẻ như anh ta muốn chỉnh sửa ~/.ssh/authorized_keystrên máy chủ từ xa.
H2ONaCl

1
Câu trả lời này dẫn tôi đến việc giải quyết vấn đề hiển thị khi bật chuyển tiếp ssh. Chuyển từ máy Ubuntu 16.04 sang hệ thống debian nơi tất cả thông tin đăng nhập ssh đang được chuyển tiếp git clonebằng cách sử dụng khóa đầu tiên trong chuỗi thay vì phiên bản trong tệp cấu hình trên hộp Ubuntu. Khóa xấu đã bị hút vào tự động và được chuyển tiếp vào hộp Debian.
redfive

1
Đây là một nỗi đau thực sự ở phía sau. Tôi đang làm việc trong các dự án của công ty và ký hợp đồng làm việc dưới một công ty khác. Điều này chỉ thêm lãng phí thời gian để quản lý cả hai. Tôi hy vọng một sửa chữa đến sớm!
joshlsullivan

1
Trong trường hợp điều này giúp được bất cứ ai: Tôi thậm chí đã cố gắng xóa hoàn toàn các tệp id_rsaid_rsa.pubtệp và khóa vẫn hiển thị. Hóa ra gpg-agent đã lưu trữ chúng trong một ~/.gnupg/sshcontroltệp; Tôi phải tự xóa chúng từ đó.
Ryan Lue

10

Nếu bạn đang cố thực hiện thao tác liên quan đến ssh và gặp lỗi sau:

$ git fetch
no such identity: <ssh key path>: No such file or directory

Bạn có thể xóa khóa ssh bị thiếu khỏi tác nhân ssh của mình bằng cách sau:

$ eval `ssh-agent -s`  # start ssh agent
$ ssh-add -D <ssh key path>  # delete ssh key

9

Trừ khi tôi hiểu nhầm, bạn đã mất .sshthư mục chứa khóa riêng của mình trên máy cục bộ và vì vậy bạn muốn xóa khóa chung trên máy chủ và cho phép đăng nhập dựa trên khóa. Trong trường hợp đó, nó sẽ được lưu trong .ssh/authorized_keystệp trong thư mục chính của bạn trên máy chủ. Bạn chỉ có thể chỉnh sửa tệp này bằng trình chỉnh sửa văn bản và xóa dòng có liên quan nếu bạn có thể xác định tệp đó (thậm chí còn dễ dàng hơn nếu đó là mục duy nhất!). Tôi hy vọng rằng khóa đó không phải là phương pháp duy nhất của bạn để truy cập vào máy chủ và bạn có một số cách khác để đăng nhập và chỉnh sửa tệp. Bạn có thể tự thêm một khóa công khai mới vào authorised_keystệp hoặc sử dụng ssh-copy-id. Dù bằng cách nào, bạn sẽ cần mật khẩu xác thực được thiết lập cho tài khoản của bạn trên máy chủ hoặc một số nhận dạng hoặc phương thức truy cập khác để truy cập authorized_keystệp trên máy chủ.

ssh-addthêm danh tính cho đại lý ssh của bạn, nơi xử lý việc quản lý danh tính của bạn cục bộ và "kết nối với đại lý được chuyển tiếp qua đăng nhập từ xa SSH và do đó người dùng có thể sử dụng các đặc quyền được cung cấp bởi các danh tính ở bất kỳ đâu trong mạng một cách an toàn." (trang nam), vì vậy tôi không nghĩ đó là những gì bạn muốn trong trường hợp này. Không có cách nào để lấy khóa công khai của bạn lên máy chủ mà không có quyền truy cập vào máy chủ đã nói thông qua đăng nhập ssh theo như tôi biết.


Tôi đã xóa tập tin này và tôi vẫn có thể kết nối. Vì vậy, nó chắc chắn không được chứa ở đây ... Đó là một khóa được thêm tự động nhưng vẫn không tồn tại ở bất cứ đâu.
Larry

5

Tôi đã mở ứng dụng "Mật khẩu và Khóa" trong Unity của mình và xóa các khóa không mong muốn khỏi Khóa bảo mật -> Khóa OpenSSH Và chúng cũng tự động bị xóa khỏi ssh-agent -l .


2
Coi chừng việc này cũng xóa chúng khỏi thư mục~/.ssh
Peter V. Mørch

1

Tôi có thể xác nhận rằng lỗi này vẫn còn trong Ubuntu 19.04. Cách giải quyết được đề xuất bởi @VonC đã hoạt động hoàn hảo, tóm tắt cho phiên bản của tôi:

  • Nhấp vào tab Hoạt động ở góc trên cùng bên trái
  • Trên hộp tìm kiếm xuất hiện, bắt đầu nhập "ứng dụng khởi động"
  • Nhấp vào biểu tượng "Ứng dụng khởi động"
  • Trên hộp bật lên, chọn ứng dụng trình quản lý vòng khóa gnome (không thể nhớ tên chính xác trên GUI nhưng nó đủ đặc biệt) và xóa nó.

Những gì tôi đã làm tiếp theo là thử ssh-add -Dlại và sau khi khởi động lại ssh-add -lđã nói với tôi Tác nhân không có danh tính. Tôi xác nhận rằng tôi vẫn còn ssh-agentdaemon chạy với ps aux | grep agent. Vì vậy, tôi đã thêm khóa tôi thường xuyên sử dụng nhất với GitHub ( ssh-add ~/.ssh/id_ecdsa) và tất cả đều tốt!

Bây giờ tôi có thể thực hiện các hoạt động bình thường với kho lưu trữ được sử dụng thường xuyên nhất của mình và nếu thỉnh thoảng tôi yêu cầu quyền truy cập vào kho lưu trữ khác sử dụng khóa RSA, tôi chỉ dành một thiết bị đầu cuối cho nó export GIT_SSH_COMMAND="ssh -i /home/me/.ssh/id_rsa.pub". Đã giải quyết! Tín dụng đến @VonC để chỉ ra lỗi và giải pháp.


1

Kiểm tra phím .ssh hay không trong hệ thống của bạn

  1. Chuyển đến thư mục -> /Users/ad Administrator /.ssh / id_ed25519.pub

Nếu không hơn

  1. Mở Terminal.

Quá khứ trong nhà ga

  1. Kiểm tra người dùng -> ssh -T git@gitlab.com

Xóa khóa .ssh hiện có

  1. Xóa Khóa .ssh hiện có -> rm ~ / .ssh / github_rsa.pub

Tạo mới

  1. Tạo khóa .ssh mới -> ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  2. Khóa công khai đã được lưu trong "/Users/ad Administrator /.ssh / id_ed25519.pub."

  3. Mở khóa công khai lưu đường dẫn.
  4. Sao chép Khóa .ssh -> Tài khoản GitLab -> Cài đặt -> Khóa SSH -> Thêm khóa
  5. Kiểm tra lại từ thiết bị đầu cuối -> ssh -T git@gitlab.com

0

Giải pháp cho tôi (OpenSuse Leap 42.3, KDE) là đổi tên thư mục ~/.gnupgchứa các khóa và hồ sơ được lưu trong bộ nhớ cache. Sau khi đăng xuất / đăng nhập KDE, ssh-add / agent đang chạy lại và thư mục được tạo từ đầu, nhưng các phím cũ đều biến mất.

Tôi đã không thành công với các phương pháp khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.