วิธีการลบคีย์ ssh


154

ขณะนี้ฉันมีคีย์ SSH เก่าที่อัปโหลดบนเซิร์ฟเวอร์ ปัญหาคือฉันสูญเสีย~/.sshไดเรกทอรีของฉัน(พร้อมต้นฉบับid_rsaและid_rsa.pubไฟล์ไฟล์)

ดังนั้นฉันต้องการลบคีย์ SSH เก่าบนเซิร์ฟเวอร์โดยตรงและอัปโหลดใหม่

ฉันลองคำสั่งต่อไปนี้โดยไม่ประสบความสำเร็จ:

$> ssh-add -D

ป้อนคำอธิบายรูปภาพที่นี่

มีวิธีลบคีย์ SSH อย่างสมบูรณ์หรือไม่?


อะไรนะssh-add -d?
user2196728

5
damnit เป็น ssh-add -D, ตัวพิมพ์ใหญ่
Alexander Mills

ตรวจสอบซ็อกเก็ตของคุณที่ใช้โดย ssh-agent (1)
Dwight Spencer

คำตอบ:


129

โปรดทราบว่ามีรายงานบั๊กอย่างน้อยสองรายงานสำหรับการssh-add -d/-D ไม่ลบคีย์:

ปัญหาที่แน่นอนคือ:

ssh-add -d/-Dลบเฉพาะคีย์ที่เพิ่มด้วยตนเองจาก gnome-keyring
ไม่มีวิธีลบคีย์ที่เพิ่มโดยอัตโนมัติ
นี่เป็นข้อผิดพลาดดั้งเดิมและยังคงปรากฏอยู่อย่างแน่นอน

ตัวอย่างเช่นหากคุณมีข้อมูลประจำตัวของ ssh ที่โหลดโดยอัตโนมัติสองรายการที่เชื่อมโยงกับบัญชี GitHub สองบัญชีที่ต่างกัน - พูดสำหรับที่ทำงานและที่บ้าน - ไม่มีทางที่จะสลับระหว่างพวกเขาได้ GitHub ทำรายการแรกที่ตรงกันดังนั้นคุณจะปรากฏเป็นผู้ใช้ 'บ้าน' ของคุณไปยัง GitHub โดยไม่มีวิธีอัพโหลดสิ่งต่าง ๆ ไปยังโครงการทำงาน

การอนุญาตให้ssh-add -dใช้กับคีย์ที่โหลดอัตโนมัติ (และssh-add -t Xเพื่อเปลี่ยนอายุการใช้งานของคีย์ที่โหลดอัตโนมัติ) จะคืนค่าการทำงานที่ผู้ใช้ส่วนใหญ่คาดหวัง


แม่นยำยิ่งขึ้นเกี่ยวกับปัญหา:

ผู้ร้ายคือgpg-keyring-daemon:

  • มันทำลายการทำงานปกติของ ssh-agent ส่วนใหญ่เพื่อให้สามารถเปิดกล่องสวย ๆ ซึ่งคุณสามารถพิมพ์ข้อความรหัสผ่านสำหรับคีย์ ssh ที่เข้ารหัส
  • และมันก็อุ้มผ่านของคุณ .sshไดเรกทอรีและเพิ่มปุ่มใด ๆ ที่พบในตัวแทนของคุณโดยอัตโนมัติ
  • และมันจะไม่ยอมให้คุณลบกุญแจเหล่านั้น

เราเกลียดสิ่งนี้อย่างไร อย่านับวิธี - ชีวิตนั้นสั้นเกินไป

ความล้มเหลวเกิดขึ้นเนื่องจากลูกค้า ssh รุ่นใหม่ลองใช้คีย์ทั้งหมดในเอเจนต์ ssh ของคุณโดยอัตโนมัติเมื่อเชื่อมต่อกับโฮสต์
หากมีจำนวนมากเกินไปเซิร์ฟเวอร์จะปฏิเสธการเชื่อมต่อ
และเนื่องจาก gnome-keyring-daemon ได้ตัดสินใจด้วยตัวเองว่ามีกี่คีย์ที่คุณต้องการให้ตัวแทนเอสเอสเอสของคุณมีและทำการโหลดอัตโนมัติและจะไม่ลบคุณคุณจะได้รับ

ข้อผิดพลาดนี้ยังคงได้รับการยืนยันใน Ubuntu 14.04.4 เร็ว ๆ นี้เมื่อสองวันก่อน (21 สิงหาคม 2014)


วิธีแก้ปัญหาที่เป็นไปได้:

  • ทำssh-add -Dเพื่อลบคีย์ที่คุณเพิ่มด้วยตนเองทั้งหมด นอกจากนี้ยังล็อคกุญแจที่เพิ่มโดยอัตโนมัติ แต่ไม่ได้ใช้งานมากนักเนื่องจากgnome-keyringจะขอให้คุณปลดล็อคปุ่มเหล่านี้เมื่อคุณลองทำgit pushจะขอให้คุณปลดล็อคพวกเขานะเมื่อคุณพยายามทำ
  • นำทางไปยัง ~/.sshโฟลเดอร์และย้ายไฟล์สำคัญทั้งหมดยกเว้นไฟล์ที่คุณต้องการระบุลงในโฟลเดอร์แยกต่างหากที่เรียกว่าการสำรองข้อมูล หากจำเป็นคุณสามารถเปิดม้านำ้าและลบกุญแจได้จากที่นั่น
  • ตอนนี้คุณควรจะสามารถทำได้git pushโดยไม่มีปัญหา

วิธีแก้ปัญหาอื่น:

สิ่งที่คุณต้องการทำคือปิดgpg-keyring-daemonโดยสิ้นเชิง
ไปที่System --> Preferences --> Startup Applicationsและยกเลิกการเลือก "SSH Key Agent (Gnome Keyring SSH Agent) " คุณจะต้องเลื่อนลงเพื่อค้นหา

คุณจะยังคงได้รับssh-agentแต่ตอนนี้มันจะทำงานได้ตามปกติ: ไม่มีปุ่มที่โหลดอัตโนมัติคุณเรียกใช้ ssh-add เพื่อเพิ่มพวกเขาและถ้าคุณต้องการลบกุญแจคุณสามารถทำได้ ลองจินตนาการว่า

ความคิดเห็นนี้แนะนำ:

การแก้ปัญหาคือการป้องกันไม่ให้gnome-keyring-managerเริ่มต้นขึ้นซึ่งเป็นการยากที่จะเกิดขึ้นได้ในที่สุดโดยการยกเลิกการอนุญาตให้ใช้ไฟล์โปรแกรม


Ryan Lueเพิ่มกรณีมุมที่น่าสนใจอีกในความคิดเห็น :

ในกรณีนี้จะช่วยให้ทุกคน: ฉันได้ลองลบid_rsaและid_rsa.pubไฟล์ทั้งหมดและกุญแจยังคงปรากฏขึ้น

ปรากฎว่าgpg-agentมีการแคชพวกเขาใน~/.gnupg/sshcontrolไฟล์ ; ฉันต้องลบมันเองจากตรงนั้น

นั่นคือกรณีที่เมื่อได้รับการเพิ่มในขณะที่ที่นี่keygrip


1
ตัวเลือกอื่นใน Ubuntu 14-16 คือการใช้ gui 'รหัสผ่านและกุญแจ' (คุณสามารถค้นหา ssh เพื่อค้นหาได้) เลือกคีย์ OpenSS เช่นจากนั้นคลิกขวาที่ปุ่มแล้วเลือกลบ คุณอาจต้องรีสตาร์ทระบบเพื่อดูว่ามันถูกลบไปแล้ว
user3257693

2
ทำไมข้อมูลนี้เกี่ยวกับssh-agentและssh-addคำตอบที่เลือก? remove the old SSH key directly on the server and upload a new oneโปสเตอร์เดิมกล่าวว่าเขาต้องการที่จะ ฟังดูเหมือนว่าเขาต้องการแก้ไข~/.ssh/authorized_keysในรีโมตโฮสต์
H2ONaCl

1
คำตอบนี้นำฉันไปสู่การแก้ไขปัญหาที่แสดงขึ้นเมื่อเปิดใช้งานการส่งต่อ ssh การเปลี่ยนจากเครื่อง Ubuntu 16.04 ไปเป็นระบบเดเบียนที่มีการส่งต่อข้อมูลประจำตัว ssh ทั้งหมดgit cloneโดยใช้คีย์แรกในกลุ่มแทนที่จะเป็นรุ่นในไฟล์ปรับแต่งบนกล่อง Ubuntu คีย์ที่ไม่ดีได้รับการดูดโดยอัตโนมัติและส่งต่อไปยังกล่องเดเบียน
redfive

1
นี่คือความเจ็บปวดที่แท้จริงที่ด้านหลัง ฉันทำงานเกี่ยวกับโครงการของ บริษัท และทำสัญญากับ บริษัท อื่น นี่เป็นการเพิ่มเวลาที่สูญเปล่าในการจัดการทั้งสองอย่าง ฉันหวังว่าการแก้ไขจะมาเร็ว ๆ นี้!
joshlsullivan

1
ในกรณีนี้จะช่วยให้ทุกคน: ฉันได้ลองลบid_rsaและid_rsa.pubไฟล์ทั้งหมดและกุญแจยังคงปรากฏขึ้น ปรากฎว่า gpg-agent กำลังแคชไว้ใน~/.gnupg/sshcontrolไฟล์ ฉันต้องลบมันเองจากตรงนั้น
Ryan Lue

10

หากคุณกำลังพยายามทำการดำเนินการที่เกี่ยวข้องกับ 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

9

นอกจากว่าฉันเข้าใจผิดคุณทำ.sshไดเรกทอรีของคุณหายไปซึ่งประกอบด้วยรหัสส่วนตัวของคุณในเครื่องของคุณและคุณต้องการลบรหัสสาธารณะที่อยู่บนเซิร์ฟเวอร์และอนุญาตการเข้าสู่ระบบด้วยคีย์ ในกรณีนั้นมันจะถูกเก็บไว้ใน.ssh/authorized_keysไฟล์ในโฮมไดเร็กตอรี่ของคุณบนเซิร์ฟเวอร์ คุณสามารถแก้ไขไฟล์นี้ด้วยโปรแกรมแก้ไขข้อความและลบบรรทัดที่เกี่ยวข้องหากคุณสามารถระบุได้ (ยิ่งถ้าเป็นเพียงรายการเดียว!) ฉันหวังว่ากุญแจไม่ใช่วิธีเดียวในการเข้าถึงเซิร์ฟเวอร์ของคุณและคุณมีวิธีอื่นในการเข้าสู่ระบบและแก้ไขไฟล์ คุณสามารถเพิ่มรหัสสาธารณะใหม่ลงในauthorised_keysไฟล์หรือใช้งานssh-copy-idได้ด้วยตนเอง ไม่ว่าจะด้วยวิธีใดคุณจะต้องตั้งค่ารหัสผ่านสำหรับบัญชีของคุณบนเซิร์ฟเวอร์หรือข้อมูลประจำตัวอื่น ๆ หรือวิธีการเข้าถึงเพื่อเข้าถึงauthorized_keysไฟล์บนเซิร์ฟเวอร์

ssh-addเพิ่มตัวตนให้กับตัวแทน ssh ของคุณซึ่งจัดการการจัดการข้อมูลประจำตัวของคุณในพื้นที่และ "การเชื่อมต่อไปยังตัวแทนนั้นจะถูกส่งต่อผ่านการเข้าสู่ระบบจากระยะไกล SSH และผู้ใช้สามารถใช้สิทธิ์ที่กำหนดโดยตัวตนได้ทุกที่ในเครือข่ายอย่างปลอดภัย" (หน้าคน) ดังนั้นฉันไม่คิดว่ามันเป็นสิ่งที่คุณต้องการในกรณีนี้ ไม่มีวิธีที่จะรับกุญแจสาธารณะของคุณบนเซิร์ฟเวอร์โดยที่คุณไม่สามารถเข้าถึงเซิร์ฟเวอร์ดังกล่าวผ่านการเข้าสู่ระบบ SSH เท่าที่ฉันรู้


ฉันลบไฟล์นี้แล้วและยังสามารถเชื่อมต่อได้ ดังนั้นมันจึงไม่มีอยู่ที่นี่แน่นอน ... มันเป็นกุญแจเพิ่มอัตโนมัติ แต่ก็ยังไม่มีอยู่จริง
Larry

5

ฉันเปิดแอปพลิเคชัน "รหัสผ่านและคีย์" ใน Unity ของฉันและลบคีย์ที่ไม่ต้องการออกจากSecure Keys -> ปุ่ม OpenSSH และพวกเขาก็ถูกลบโดยอัตโนมัติจากssh-agent -lเช่นกัน


2
ระวังว่าสิ่งนี้จะลบพวกเขาออกจากไดเรกทอรี~/.ssh
Peter V. Mørch

1

ฉันสามารถยืนยันได้ว่าข้อผิดพลาดนี้ยังคงอยู่ใน Ubuntu 19.04 วิธีแก้ปัญหาที่แนะนำโดย @VonC ทำงานได้อย่างสมบูรณ์โดยสรุปสำหรับรุ่นของฉัน:

  • คลิกที่แท็บกิจกรรมที่มุมซ้ายบน
  • ในช่องค้นหาที่ปรากฏขึ้นให้เริ่มพิมพ์ "แอปพลิเคชันเริ่มต้น"
  • คลิกที่ไอคอน "แอปพลิเคชันเริ่มต้น"
  • ในกล่องที่ปรากฏขึ้นให้เลือกแอปพลิเคชันตัวจัดการแหวนพวงกุญแจ gnome (จำชื่อที่แน่นอนไม่ได้บน GUI แต่มีความโดดเด่นพอ) แล้วลบออก

สิ่งที่ฉันทำต่อไปคือลองssh-add -Dอีกครั้งและหลังจากรีบูตssh-add -lบอกฉันตัวแทนไม่มีตัวตน ผมยืนยันว่าผมยังมีภูตทำงานด้วย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"ที่ฉันเพิ่งอุทิศขั้วหนึ่งสำหรับมันด้วย แก้ไข! เครดิตไปที่ @VonC เพื่อชี้จุดบกพร่องและแนวทางแก้ไข


1

ตรวจสอบคีย์. ssh หรือไม่ในระบบของคุณ

  1. ไปที่โฟลเดอร์ -> /Users/administrator/.ssh/id_ed25519.pub

ถ้าไม่เกิน

  1. เปิด Terminal

ผ่านไปในเครื่อง

  1. ตรวจสอบผู้ใช้ -> ssh -T git@gitlab.com

ลบคีย์. ssh ที่มีอยู่

  1. ลบคีย์. ssh ที่มีอยู่ -> rm ~ / .ssh / github_rsa.pub

สร้างใหม่

  1. สร้างคีย์. ssh ใหม่ -> ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  2. รหัสสาธารณะถูกบันทึกใน "/Users/administrator/.ssh/id_ed25519.pub"

  3. เปิดเส้นทางที่บันทึกคีย์สาธารณะ
  4. คัดลอกคีย์. ssh -> บัญชี GitLab -> การตั้งค่า -> คีย์ SSH -> เพิ่มคีย์
  5. ทดสอบอีกครั้งจากเทอร์มินัล -> ssh -T git@gitlab.com

0

ทางออกสำหรับฉัน (OpenSuse Leap 42.3, KDE) คือการเปลี่ยนชื่อโฟลเดอร์ ~/.gnupgซึ่งมีคีย์แคชและโปรไฟล์ หลังจากที่ล็อกออน / ล็อกออนของ KDE ssh-add / agent กำลังทำงานอีกครั้งและโฟลเดอร์ถูกสร้างขึ้นใหม่ตั้งแต่ต้น แต่คีย์เก่าหายไปหมด

ฉันไม่ประสบความสำเร็จกับวิธีการอื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.