पासफ़्रेज़ के बिना स्वचालित ssh-keygen, कैसे?


86

मैं एक स्वचालित स्क्रिप्ट बनाना चाहूंगा जो कॉल करती है ssh-keygenऔर कुछ पब / निजी कीपर्स बनाती है जो मैं बाद में उपयोग करूंगा। सिद्धांत रूप में, सब कुछ ठीक काम करता है .... ....
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
सिवाय इसके कि यह मुझसे पासफ़्रेज़ के लिए कहता है जो चाबियों को एन्क्रिप्ट करेगा। यह मेक-वर्तमान प्रस्तुत करता है- स्वचालितकरण कठिन।

मैं कमांड लाइन तर्क के माध्यम से एक पासफ़्रेज़ प्रदान कर सकता हूं -N thepassphrase, ताकि शीघ्रता से प्रकट होने से बचा रह सके। फिर भी मुझे कुंजी रखने की इच्छा नहीं है - इसके अलावा एन्क्रिप्शन द्वारा सुरक्षित है - और चाहते हैं कि कीपे सादे हो।

इस समस्या का एक (सबसे अच्छा) समाधान क्या है?

-qविकल्प जो माना जाता है कि इसका मतलब है "शांत / मूक" अभी भी पदबंध बातचीत से बचने नहीं करता। इसके अलावा मुझे ऐसा कुछ नहीं मिला है
ssh-keygen ...... -q --no-passphrase

कृपया "लापता पासफ़्रेज़" के समर्थक और विपक्ष के बारे में मुझे प्रचार करना या व्याख्यान देना शुरू न करें, मुझे इस बात की जानकारी है। संवादात्मक रूप में (स्क्रिप्ट के रूप में नहीं) उपयोगकर्ता बस [ENTER] को दो बार हिट कर सकता है और कुंजी को प्लेनटेक्स्ट के रूप में सहेजा जाएगा। यह मैं इस तरह से एक स्क्रिप्ट में हासिल करना चाहता हूं:

#! / Bin / bash

command1
command2
var = $ (command3)

# यह स्क्रिप्ट बंद नहीं करना चाहिए और पासवर्ड के लिए पूछना चाहिए
ssh-kegen -b 2048 -t rsa -f / tmp / sshkey -q

जवाबों:


105

यह पासफ़्रेज़ प्रॉम्प्ट को प्रदर्शित होने से रोकेगा और की-जोड़ी को प्लेनटेक्स्ट में संग्रहीत करने के लिए सेट करेगा (जो निश्चित रूप से उस के सभी नुकसान और जोखिम वहन करता है):

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

3
यह काम। हालांकि /tmp/sshkeyपहले से ही मौजूद होने के बावजूद किसी को ओवरराइट प्रॉम्प्ट मिलता है। इसे पुनर्निर्देशन / समापन स्टड के माध्यम से रोका जा सकता है - जैसे जोड़कर 0>&-
19

34

सबसे आसान तरीका मुझे वही करना है जो आप चाहते हैं (उदाहरण के लिए डिफ़ॉल्ट फ़ाइलनाम का उपयोग करके)

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

यदि ~/.ssh/id_rsaफ़ाइल पहले से मौजूद है, तो कमांड कुछ भी संशोधित किए बिना बाहर निकल जाएगी।

यदि नहीं, तो आपको फ़ाइल नाम में एक बिलकुल नई कुंजी मिलती है।

किसी भी तरह से, आपने कुछ भी अधिलेखित नहीं किया है, और आप जानते हैं कि आपके पास एक कुंजी है।


पुष्टि की: lubuntu 14.04.2 पर
user77115

यदि आप वास्तव में इसे शांत करना चाहते हैं, तो आउटपुट को / dev / null पर पाइप करें:cat /dev/zero | ssh-keygen -q -N "" > /dev/null
क्रिस ग्रेग

पर (माना एंटीक) SLES 11 उपरोक्त कमांड एक कुंजी का उत्पादन करने में विफल रहता है। yes "" | ssh-keygen -N "" >&- 2>&-हालांकि ठीक काम करता है और कुछ भी आउटपुट नहीं करता है (किफाइल पहले से मौजूद है या नहीं), और पहले से मौजूद की-फाइल को ओवरराइट नहीं करता है।
प्रातः

उबंटू भरोसेमंद (14.04)
बिनिता भारती

2
आप बिल्ली / देव / शून्य क्यों हैं?
maxschlepzig

9

यह मेरे लिए काम किया:

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

-Pपदबंध विकल्प है, और ""खाली पदबंध है।


key_save_pStreet: ऐसी कोई फ़ाइल या निर्देशिका नहीं
दिमित्री कोपरिवा

5
-P <passphrase>विकल्प (पुराने) पदबंध प्रदान करना है। linux.die.net/man/1/ssh-keygen
Gianfranco P.

5

आप आपके लिए "एन्टर" भेजने की उम्मीद का उपयोग कर सकते हैं

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\"
")

लेकिन ध्यान रखें, कि यदि फ़ाइल / tmp / sshkey पहले से मौजूद है तो यह विफल हो जाएगा क्योंकि कमांड का आउटपुट अलग होगा।


1
योगदान के लिए धन्यवाद। उम्मीद एक ही तरह की समस्याओं के लिए और भी अधिक बहुमुखी लगती है .... अच्छी तरह से जहां स्क्रिप्टिंग और उपयोगकर्ता-इंटरैक्शन संघर्ष होगा। मैं संभावित कॉन्फ्लिक्ट के बारे में पता करूंगा कि / tmp / sshkey पहले से मौजूद है और आपकी कमांड का उपयोग करने से पहले इसके लिए जांच करें।
मानवतावादपी

2

मैंने ssh-keygen से पहले एक साधारण गूंज किया। इसलिएsu - <user> -c "echo |ssh-keygen -t rsa"

यह Redhat 6 पर परीक्षण किया गया था


मुझे नहीं लगता कि यह सबसे अच्छा उत्तर है, लेकिन मुझे लगता है कि लोगों को या तो नीचे करने का कोई कारण नहीं है।
cubuspl42

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.