암호없이 자동 ssh-keygen, 어떻게?


86

ssh-keygen나중에 사용할 pub / private 키 쌍을 호출 하고 만드는 자동화 된 스크립트를 만들고 싶습니다 . 원칙적으로 모든 것이 잘 작동합니다 ....
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... 키를 암호화하는 암호를 요구한다는 것을 제외하고. 이것은 현재 자동화를 어렵게한다.

-N thepassphrase프롬프트가 나타나지 않도록 명령 줄 인수를 통해 암호를 제공 할 수 있습니다 . 여전히 암호화를 통해 키를 안전하게 보호 하고 키 쌍을 일반 텍스트로 사용하고 싶지 않습니다.

이 문제에 대한 최상의 솔루션은 무엇입니까?

-q"자동 / 자동"을 의미 하는 옵션은 여전히 ​​암호문 상호 작용을 피하지 않습니다. 또한 나는 이런 것을 찾지 못했습니다
ssh-keygen ...... -q --no-passphrase

"암호 누락"의 장단점에 대해 설교하거나 강의하지 마십시오. 나는 그것을 알고 있습니다. 스크립트가 아닌 대화 형 형식에서 사용자는 [ENTER]를 두 번 누르기 만하면 키가 일반 텍스트로 저장됩니다. 이것은 다음과 같은 스크립트에서 달성하고자하는 것입니다.

#! / bin / bash

command1
command2
var = $ (명령 3)

# 스크립트를 중지하고 비밀번호를 요구해서는 안됩니다
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이미는하지만, 덮어 쓰기 프롬프트를 얻을 수 존재한다. 이는 예를 들어 추가를 통해 리디렉션 / 닫기 stdin을 통해 방지 할 수 있습니다 0>&-.
maxschlepzig

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
Chris Gregg

SLES 11에서 (고풍스럽게도) 위의 명령은 키를 생성하지 못합니다. yes "" | ssh-keygen -N "" >&- 2>&-그러나 잘 작동하고 (키 파일이 존재하는지 여부와 상관없이) 아무것도 출력하지 않으며 기존 키 파일을 덮어 쓰지 않습니다.
zrajm 2016 년

(14.04) 우분투 믿을만에 검증
Binita 바라 티

2
왜 고양이 / dev / zero입니까?
maxschlepzig


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가 이미 존재한다는 잠재적 충돌을 알고 명령을 사용하기 전에 확인하십시오.
humanandANDpeace

2

ssh-keygen 전에 간단한 에코를 수행했습니다. 그래서su - <user> -c "echo |ssh-keygen -t rsa"

이것은 Redhat 6에서 테스트되었습니다


나는 이것이 최선의 대답이라고 생각하지 않지만, 둘 다 공감 할 이유가 없다고 생각합니다.
cubuspl42

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.