Ssh-keygen tự động không có cụm mật khẩu, làm thế nào?


86

Tôi muốn tạo một tập lệnh tự động gọi ssh-keygenvà tạo một số bàn phím pub / private mà tôi sẽ sử dụng sau này. Về nguyên tắc mọi thứ đều hoạt động tốt với ....
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... ngoại trừ việc nó yêu cầu tôi nhập cụm mật khẩu sẽ mã hóa các khóa. Điều này làm cho - hiện tại - việc tự động hóa khó khăn.

Tôi có thể cung cấp cụm mật khẩu thông qua đối số dòng lệnh -N thepassphrase, để giữ cho lời nhắc không xuất hiện. Tuy nhiên, tôi thậm chí không muốn có các khóa - được bảo mật bổ sung bằng mã hóa - và muốn các khóa được làm rõ.

Một giải pháp (tốt nhất) cho vấn đề này là gì?

Các -qtùy chọn được cho là có nghĩa là "yên tĩnh / im lặng" không vẫn không tránh sự tương tác mật khẩu. Ngoài ra tôi đã không tìm thấy một cái gì đó như thế này
ssh-keygen ...... -q --no-passphrase

Xin đừng bắt đầu giảng về hoặc giảng cho tôi những ưu và nhược điểm của "cụm mật khẩu còn thiếu", tôi nhận thức được điều đó. Ở dạng tương tác (không phải là tập lệnh), người dùng chỉ cần nhấn [ENTER] hai lần và khóa sẽ được lưu dưới dạng văn bản gốc. Đây là những gì tôi muốn đạt được trong một kịch bản như thế này:

#! / bin / bash

lệnh1
lệnh2
var = $ (lệnh3)

# điều này không nên dừng tập lệnh và yêu cầu mật khẩu
ssh-kegen -b 2048 -t rsa -f / tmp / sshkey -q

Câu trả lời:


105

Điều này sẽ ngăn lời nhắc cụm mật khẩu xuất hiện và đặt cặp khóa được lưu trữ trong bản rõ (tất nhiên mang tất cả các nhược điểm và rủi ro của điều đó):

ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""

3
Những công việc này. Trong trường hợp /tmp/sshkeyđã tồn tại, người ta nhận được một dấu nhắc ghi đè. Điều này có thể được ngăn chặn thông qua chuyển hướng / đóng stdin - ví dụ như thông qua việc thêm 0>&-.
maxschlepzig

34

Cách đơn giản nhất tôi tìm thấy để làm những gì bạn muốn là điều này (ví dụ sử dụng tên tệp mặc định)

    cat /dev/zero | ssh-keygen -q -N ""

Nếu ~/.ssh/id_rsatập tin đã tồn tại, lệnh sẽ thoát mà không sửa đổi bất cứ điều gì.

Nếu không, bạn nhận được một khóa hoàn toàn mới, trong tên tệp đó.

Dù bằng cách nào, bạn đã không ghi đè lên bất cứ điều gì và bạn biết cuối cùng bạn có một chìa khóa.


đã xác nhận: trên Lubfox 14.04.2
user77115 15/03/2015

Nếu bạn thực sự muốn nó yên tĩnh, hãy chuyển đầu ra thành / dev / null:cat /dev/zero | ssh-keygen -q -N "" > /dev/null
Chris Gregg

Trên (thừa nhận cổ) SLES 11 lệnh trên không tạo được khóa. yes "" | ssh-keygen -N "" >&- 2>&-Tuy nhiên, nó chỉ hoạt động tốt và không xuất ra bất cứ thứ gì (dù có tồn tại một keyfile hay không) và không ghi đè lên một keyfile hiện có trước đó.
zrajm

Đã xác minh trên Ubuntu đáng tin cậy (14.04)
Binita Bharati

2
Tại sao bạn mèo / dev / zero?
maxschlepzig

9

Điều này làm việc cho tôi:

ssh-keygen -t rsa -f /home/oracle/.ssh/id_rsa -q -P ""

Các -Plà lựa chọn cụm từ mật khẩu, và ""là cụm từ mật khẩu trống.


key_save_private: Không có tệp hoặc thư mục như vậy
Dimitri Kopriwa

5
Các -P <passphrase>tùy chọn là cung cấp (cũ) cụm từ mật khẩu. linux.die.net/man/1/ssh-keygen
Gianfranco P.

5

Bạn có thể sử dụng mong đợi để gửi "nhập" cho bạn

cat test.sh
#!/bin/bash
set -x
XYZ=$(expect -c "
spawn ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
expect \"Enter passphrase (empty for no passphrase):\"
send \"\r\"
expect \"Enter same passphrase again:\"
send \"\r\"
")

Nhưng hãy lưu ý rằng nếu tệp / tmp / sshkey đã tồn tại thì nó sẽ thất bại vì đầu ra của lệnh sẽ khác nhau.


1
cảm ơn bạn đã đóng góp sự mong đợi dường như thậm chí còn linh hoạt hơn đối với các vấn đề cùng loại .... những người mà kịch bản và tương tác người dùng sẽ xung đột. Tôi sẽ nhận thức được các conflicht tiềm năng mà / tmp / sshkey đã tồn tại và kiểm tra nó trước khi sử dụng lệnh của bạn.
nhân

2

Tôi đã làm một tiếng vang đơn giản trước ssh-keygen. Vì thếsu - <user> -c "echo |ssh-keygen -t rsa"

Điều này đã được thử nghiệm trên Redhat 6


Tôi không nghĩ đây là câu trả lời hay nhất, nhưng tôi nghĩ không có lý do gì để hạ thấp cả, các bạn.
cubuspl42

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.