ฉันจะลบวลีรหัสผ่านสำหรับคีย์ SSH โดยไม่ต้องสร้างคีย์ใหม่ได้อย่างไร


1033

ฉันตั้งข้อความรหัสผ่านเมื่อสร้างคีย์ SSH ใหม่บนแล็ปท็อปของฉัน แต่อย่างที่ฉันรู้ตอนนี้มันค่อนข้างเจ็บปวดเมื่อคุณพยายามที่จะส่งมอบ ( GitและSVN ) ไปยังสถานที่ห่างไกลผ่าน SSH หลายครั้งในหนึ่งชั่วโมง

วิธีหนึ่งที่ฉันคิดได้คือลบกุญแจ SSH และสร้างใหม่ มีวิธีลบข้อความรหัสผ่านในขณะที่ยังคงรหัสเดิมอยู่หรือไม่?


9
ฉันคิดว่าคำตอบที่แท้จริงคือคำตอบของ Torsten Marek เคล็ดลับ ssh-agent อาจเป็นสิ่งที่คุณกำลังมองหา แต่มันเป็นคำตอบสำหรับคำถามอื่น
ทำให้เข้าใจผิด

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

97
การปิดคำถามดังกล่าวนั้นเหมือนกับการพิจารณาผลข้างเคียงที่เกิดขึ้นในภาษาการเขียนโปรแกรมควรได้รับอนุญาตเพราะพวกเขานั้น 'บริสุทธิ์' หรือไม่ นักสอนมักจะวิ่งอาละวาดในขณะที่คนอื่นไม่ให้โทษเพราะมันเป็นคุณสมบัติที่เป็นประโยชน์และทำให้ชีวิตง่ายขึ้น ssh จำเป็นต้องใช้แม้จะยาก แต่ก็ไม่เกี่ยวข้องกับการเขียนโปรแกรมอย่างเคร่งครัด ... อย่าปิดคำถามดังกล่าว : |
sjas

คำตอบ:


1932

คำตอบสั้น ๆ :

$ ssh-keygen -p

จากนั้นสิ่งนี้จะแจ้งให้คุณป้อนตำแหน่ง keyfile, passphrase เก่าและ passphrase ใหม่ (ซึ่งสามารถเว้นว่างไว้เพื่อไม่มีข้อความรหัสผ่าน)


หากคุณต้องการที่จะทำทั้งหมดในบรรทัดเดียวโดยไม่ต้องแจ้งให้ทำ:

$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

สำคัญ:ระวังว่าเมื่อเรียกใช้คำสั่งโดยทั่วไปคำสั่งเหล่านั้นจะถูกบันทึกไว้ใน~/.bash_historyไฟล์ของคุณ(หรือคล้ายกัน) ในข้อความธรรมดารวมถึงอาร์กิวเมนต์ทั้งหมดที่มีให้ (เช่นวลีรหัสผ่านในกรณีนี้) ดังนั้นจึงขอแนะนำให้คุณใช้ตัวเลือกแรกยกเว้นว่าคุณมีเหตุผลเฉพาะที่จะทำอย่างอื่น

แจ้งให้ทราบว่าที่คุณยังสามารถใช้-f keyfileโดยไม่ต้องระบุ-Pว่ามิได้-Nและที่เริ่มต้น keyfile ไป~/.ssh/id_rsaดังนั้นในหลายกรณีก็ไม่จำเป็นแม้กระทั่ง

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


464
เพื่อให้ชัดเจน: คุณสามารถทำงานssh-keygen -pในเทอร์มินัล จากนั้นจะพร้อมท์ให้คุณใส่คีย์ไฟล์ (ค่าเริ่มต้นเป็นไฟล์ที่ถูกต้องสำหรับฉัน~/.ssh/id_rsa), วลีรหัสผ่านเก่า (ป้อนสิ่งที่คุณมีตอนนี้) และวลีรหัสผ่านใหม่ (ป้อนอะไร)
Henrik N

34
อดีต :ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa
Fedir RYKHTIK

24
-1 สำหรับการทำผู้ใช้พิมพ์รหัสผ่านของเขาใน terminal ~/.bash_historyและทำให้มันผ่านเข้าถึง จะดีกว่าที่จะพิมพ์:$ cd ~/.ssh && ssh-keygen -f id_dsa -p
betoharres

5
พวกคุณควรทราบว่าถ้าคุณป้อนคำสั่งให้เชลล์เริ่มต้นพื้นที่ (สีขาว) คำสั่งนั้นจะไม่ถูกบันทึกลงใน~/.bash_hstoryIe ใช้ `ssh-keygen -p -P oldpassphrase -N" "-f ~ / .ssh / id_rsa` และคุณก็ใช้ได้ (เว้นแต่คุณมี keylogger อื่น ๆ อยู่ที่นั่น) นอกจากนี้คุณยังสามารถได้รับการกำจัดของการบันทึกจากประวัติศาสตร์ ..
ขนาดใหญ่

14
อาจเป็นการเพิ่มบรรทัดที่บอกว่าสิ่งนี้จะเขียนทับไฟล์ที่มีอยู่และไม่พร้อมท์สำหรับตำแหน่งใหม่
Lars Francke

46

$ ssh-keygen -p ทำงานให้ฉัน

ทุบตีคอมไพล์เปิด วางแล้ว:$ ssh-keygen -p

กด Enter สำหรับตำแหน่งเริ่มต้น

ป้อนข้อความรหัสผ่านเก่า

ป้อนข้อความรหัสผ่านใหม่ - BLANK

ยืนยันข้อความรหัสผ่านใหม่ - BLANK

บูมความเจ็บปวดจากการป้อนข้อความรหัสผ่านสำหรับการกดคอมไพล์ก็หายไป

ขอบคุณ!


หากเมื่อคุณกด Enter $ ssh-keygen -pและคีย์ของคุณไม่ได้อยู่ที่ตำแหน่งเริ่มต้นพูดว่า (/Users/yourname/.ssh/id_rsa) คุณสามารถตอบกลับโดยใส่/Users/yourname/.ssh/yourkeyเมื่อได้รับแจ้ง
Chigozie Orunta

37

คุณอาจต้องการเพิ่มสิ่งต่อไปนี้ใน. bash_profile (หรือเทียบเท่า) ซึ่งเริ่มต้น ssh-agent เมื่อเข้าสู่ระบบ

if [ -f ~/.agent.env ] ; then
    . ~/.agent.env > /dev/null
    if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
        echo "Stale agent file found. Spawning new agent… "
        eval `ssh-agent | tee ~/.agent.env`
        ssh-add
    fi 
else
    echo "Starting ssh-agent"
    eval `ssh-agent | tee ~/.agent.env`
    ssh-add
fi

ใน Linux distros บางรุ่น (Ubuntu, Debian) คุณสามารถใช้:

ssh-copy-id -i ~/.ssh/id_dsa.pub username@host

สิ่งนี้จะคัดลอกรหัสที่สร้างไปยังเครื่องระยะไกลและเพิ่มไปยังพวงกุญแจระยะไกล

คุณสามารถอ่านเพิ่มเติมที่นี่และที่นี่


7
ไม่การกระจายที่ทันสมัยเริ่มต้น ssh-agent ออกจากกล่องหรือไม่
Troels Arvin

ใน Linux distros บางรุ่น (Ubuntu, Debian) คุณสามารถใช้: ssh-copy-id -i ~ / .ssh / id_dsa.pub ชื่อผู้ใช้ @ hostสมมติว่าคุณสามารถเข้าใช้งานได้ และแม้ว่าจะมาจากปี 2008 มันอาจจะมีการแก้ไขเพื่ออ้างถึง id_rsa.pub (ใช่ฉันสามารถแก้ไขได้ แต่ฉันรู้สึกไม่สบายใจที่จะทำเช่นนั้นกับผลงานของผู้อื่น - และมันจะเป็นเช่นนี้)
Pryftan

@TroelsArvin ใช่ แต่ otoh มีบางครั้งที่มันถูกฆ่าตาย (แม้ว่าสถานการณ์ที่ฉันเจอจะไม่เป็นที่สนใจ - เว้นแต่ว่า X11 อาจมีปัญหาและคุณต้องเริ่มต้นใหม่ ... ซึ่งอาจเป็นกรณีหนึ่ง) ในกรณีนี้คุณต้อง 'สร้าง' ใหม่
Pryftan

8

หากต้องการเปลี่ยนหรือลบข้อความรหัสผ่านฉันมักจะพบว่าง่ายที่สุดในการส่งผ่านเฉพาะpและตั้งfค่าสถานะแล้วให้ระบบแจ้งให้ฉันระบุวลีรหัสผ่าน:

ssh-keygen -p -f <name-of-private-key>

ตัวอย่างเช่น

ssh-keygen -p -f id_rsa

ป้อนรหัสผ่านที่ว่างเปล่าหากคุณต้องการลบข้อความรหัสผ่าน

ตัวอย่างการรันเพื่อลบหรือเปลี่ยนรหัสผ่านมีลักษณะดังนี้:

ssh-keygen -p -f id_rsa
Enter old passphrase: 
Key has comment 'bcuser@pl1909'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

เมื่อเพิ่มข้อความรหัสผ่านให้กับคีย์ที่ไม่มีข้อความรหัสผ่านการเรียกใช้จะมีลักษณะดังนี้:

ssh-keygen -p -f id_rsa
Key has comment 'charlie@elf-path'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

3

บน windows คุณสามารถใช้ PuttyGen เพื่อโหลดไฟล์ไพรเวตคีย์ลบวลีรหัสผ่านแล้วเขียนทับไฟล์ไพรเวตคีย์ที่มีอยู่


2

ในMacคุณสามารถจัดเก็บวลีรหัสผ่านสำหรับคีย์ ssh ส่วนตัวของคุณใน Keychain ซึ่งทำให้การใช้งานของมันโปร่งใส หากคุณเข้าสู่ระบบจะสามารถใช้งานได้เมื่อคุณลงชื่อออกจากผู้ใช้รูทของคุณไม่สามารถใช้งานได้ การลบข้อความรหัสผ่านเป็นความคิดที่ไม่ดีเพราะทุกคนที่มีไฟล์สามารถใช้งานได้

ssh-keygen -K

เพิ่มไปยัง ~/.ssh/config

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