การกดปุ่ม "enter" โดยอัตโนมัติสำหรับ bash script ที่สร้างคีย์ ssh


102

ฉันต้องการสร้างสคริปต์ที่เรียกssh-keygen -t rsaใช้ แต่จะผ่านไปได้อย่างไร 3 ครั้งเข้า?

คำตอบ:


218

ลอง:

ssh-keygen -t rsa -N "" -f my.key

-N "" บอกให้ใช้ข้อความรหัสผ่านที่ว่างเปล่า (เช่นเดียวกับการป้อนสองรายการในสคริปต์โต้ตอบ)

-f my.keyบอกให้จัดเก็บคีย์ไว้ในmy.key(เปลี่ยนตามที่เห็นสมควร)

ทุกอย่างทำงานได้โดยที่คุณไม่จำเป็นต้องใส่คีย์ใด ๆ :)

ในการส่งเข้าสู่สคริปต์โต้ตอบ:

echo -e "\n\n\n" | ssh-keygen -t rsa

4
มันเป็น anwser ที่ถูกต้อง แต่ฉันยังคงต้องการทราบวิธีการกด Enter มากกว่าหนึ่งครั้ง - ในสคริปต์อื่น
Sławosz

3
สิ่งที่แน่นอน - อัปเดตคำตอบเพื่อรวมวิธีการส่งขึ้นบรรทัดใหม่ไปยังสคริปต์
Rudu

2
เสียงสะท้อน -e "\ n \ n \ n" | sshkeygen -t rsa ใช้ไม่ได้สำหรับฉันคุณลองด้วยตัวเองได้ไหม ผ่านเข้าไปครั้งแรกเท่านั้น แต่ในสคริปต์อื่น ๆ มันใช้งานได้ง่าย
Sławosz

1
ฉันทดสอบก่อนที่จะโพสต์ - ใช้งานได้ดีแม้ว่าจะดูเหมือนเส้นประจากการssh-keygenตกหล่น - คุณเพิ่มกลับเข้าไปหรือไม่? {แก้ไข} นอกจากนี้ - คุณไม่สามารถเรียกใช้สคริปต์มากกว่าหนึ่งครั้งได้ - จะเปลี่ยนคำถามเพื่อยืนยันว่าคุณต้องการเขียนทับ_rsaไฟล์คีย์ที่มีอยู่(ดังนั้นต้องระบุ ay หรือ n)
Rudu

13
ฉันขอแนะนำให้ใช้yes ""แทนecho -e "\n\n\n"( yesผลลัพธ์ที่ได้รับอาร์กิวเมนต์ใด ๆ [หรือ "y" โดยค่าเริ่มต้น] เป็นแบบอินฟินิตี้ - เหมาะสำหรับสถานการณ์เหล่านี้ที่ต้องการเพียงแค่ให้คำตอบ "ใช่" สำหรับสิ่งที่โปรแกรมอาจแจ้งให้) yesสั้นกว่าและควรssh-keygenเพิ่มคำถามที่จะได้รับคำตอบโดยอัตโนมัติด้วย :)
zrajm

22

เวอร์ชันที่มีข้อความรหัสผ่านคือ:

$ ssh-keygen -t rsa -b 4096 -C "comment" -P "examplePassphrase" -f "desired pathAndName" -q 
  • -q คือเงียบ

ที่มาคือhttp://linux.die.net/man/1/ssh-keygen


4
ใช้ -P สำหรับข้อความรหัสผ่านที่มีอยู่ใช้ -N สำหรับข้อความใหม่
brianlmerritt

1

เห็นด้วยกับMichel Marroยกเว้นว่าต้องการมากกว่านั้น: หากมีไฟล์อยู่แล้วไฟล์จะยังคงโต้ตอบได้เพื่อถามว่าต้องเขียนทับหรือไม่

ใช้คำตอบของคำถามนี้

yes y | ssh-keygen -q -t rsa -N '' >/dev/null

การเปลี่ยนเส้นทางเป็นโมฆะเป็นสิ่งจำเป็นเพื่อปิดเสียงข้อความที่เขียนทับ


0
echo -e "\n"|ssh-keygen -t rsa -N ""

เอ๊ะ? สิ่งนี้มีบรรทัดใหม่น้อยกว่าหนึ่งในคำตอบที่คุณอ้างว่าไม่ได้ผล (และอยู่ในส่วนย่อยของแพลตฟอร์มที่echo -eปล่อยสิ่งอื่นนอกเหนือไป-eจากทั้งหมดซึ่งไม่มีssh-keygenให้บริการทุกที่)
Charles Duffy

... เพื่อความชัดเจนฉันใช้ประโยชน์จากการผลิตssh-keygen -N ''เป็นส่วนหนึ่งของขั้นตอนการติดตั้งอัตโนมัติและมันไม่อ่าน stdin เลยดังนั้นจึงไม่จำเป็นต้องมีการpip echo( ตัวแปรใด ๆ echo ) เข้าไปในนั้น (จริงอยู่ฉันเชื่อว่า stdin เชื่อมต่อกับ/dev/nullในกรณีการใช้งานการผลิตของฉันอาจมีพฤติกรรมที่แตกต่างออกไปเมื่อติดกับ TTY แต่คำตอบที่ดีกว่าคือ</dev/nullมากกว่าecho ... |)
Charles Duffy

1
มันแจ้งชื่อไฟล์ให้ฉัน: $ ssh-keygen -t rsa -N '' Generating public/private rsa key pair. Enter file in which to save the key (/home/dlyons/.ssh/id_rsa):
Mannix

0

ขอแนะนำให้ใช้ed25519เพื่อความปลอดภัยและประสิทธิภาพ

yes "y" | ssh-keygen -o -a 100 -t ed25519 -C "Bla Bla" -f /mypath/bla -N ""

ที่นี่

-o รูปแบบคีย์ OpenSSH แทน PEM รุ่นเก่า (ต้องการ OpenSSH 6.5+)

-a จำนวนการทดสอบเบื้องต้นขณะคัดกรองผู้สมัคร DH-GEX

-t ประเภทของคีย์ (ed25519, RSA, DSA เป็นต้น)

-f /mypath/bla พา ธ และชื่อไฟล์เอาต์พุต

-N "" ใช้ passphase ว่าง

และyes "y"ไม่มีการโต้ตอบ

มันจะสร้างไฟล์สองไฟล์

/mypath/bla
/mypath/bla.pub

โดยที่blaไฟล์เป็นแบบส่วนตัวและbla.pubเป็นแบบสาธารณะ

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