SSH 키를 저장하는 방법은 무엇입니까?

SSH 키를 저장하는 방법은 무엇입니까?

저는 최근에 비밀번호 대신 SSH 키를 사용하기 시작했습니다(물론 GitHub 덕분에). 따라서 저는 이 전체 개념이 꽤 낯설다는 점을 명심하세요. 현재 내 키는 ~/.ssh 아래에 있지만 이것이 좋은 습관인지는 확실하지 않습니다. 예를 들어 여러 대의 컴퓨터가 있는 경우 개인 키를 복제해야 하는데 이는 바람직하지 않다고 생각합니다. 또는 HDD가 고장나면 해당 키를 잃어버리게 되는데, 이는 바람직하지 않은 일이기도 합니다.

그렇다면 SSH 키를 안전하고 편리하며 안정적으로 저장하는 모범 사례는 무엇입니까?

스마트 카드를 사용하는 것이 옵션인 것 같습니다(참조:gpg/ssh 키 저장을 위한 스마트카드(Linux) - 무엇이 필요합니까?), 이것이 최선입니까?

업데이트: 질문의 이유는 많은 서비스(예: GitHub, AWS EC2)가 서비스 사용을 위해 SSH 키를 설정하는 방법에 대한 가이드를 제공하지만 배경 지식(예: 이미 생성된 키가 있는 경우 수행할 작업)이 거의 또는 전혀 없기 때문입니다. [1] 에서 ssh-keygen권장되는 보안 조치는 무엇입니까). 그리고 해당 정보가 실제로 중요하지 않은지, 아니면 '기본적으로' 알고 있어야 하는지는 확실하지 않습니다.

지금까지의 답변을 요약하자면(그러나 읽어보시고 추가할 내용이 있으면 그렇게 하십시오.): 이 경우에는 개인 키를 다른 사람이 볼 수 없도록 ~/.ssh에 그대로 놔두어도 괜찮을 것 같습니다. 하지만 키를 분실한 경우(일반적인 경우) 새 키를 업로드하거나 생성하기 위해 서비스에 액세스할 수 있는 다른 방법이 있는지 확인하세요.

[1] GitHub를 제공하는 데 사용됨여러 키를 관리하는 방법에 대한 도움말.

답변1

예를 들어 여러 대의 컴퓨터가 있는 경우 개인 키를 복제해야 하는데 이는 바람직하지 않다고 생각합니다.

아니요, 실제로는 그렇지 않습니다. 여러 대의 컴퓨터가 있는 경우 각 컴퓨터에 별도의 개인 키를 생성하면 됩니다. 각 개인 키에 대해 동일한 프로세스를 사용하여 해당 공개 키를 GitHub에 업로드하면 됩니다.

또한 내 HDD가 문제를 일으키면 개인 키를 잃게 되는데, 이는 바람직하지 않은 일이기도 합니다.

설마; 개인 키를 분실한 경우 새 키를 생성하고 해당 공개 키를 업로드하세요.

그만한 가치가 있기 때문에 개인 키를 복제하는 것은 매우 바람직하지 않다는 것이 맞습니다. 이상적으로는 개인 키가 하나의 파일( ~/.ssh/id_rsa예:) 에 생성되어야 하며절대해당 파일을 그대로 두십시오. 즉, 파일을 복사하거나 이동해서는 안 되며 특히 네트워크를 통해 전송해서는 안 됩니다. (예: 백업에서 제외합니다.) 비대칭 인증 프로토콜의 특성상 개인 키가 다른 사람의 손에 들어가지 않도록 주의하면 됩니다. 조금 지나치게 하여 스스로 추적을 잃더라도 일반적으로 큰 문제는 아닙니다. (이것을 비대칭과 혼동하지 마십시오.암호화개인 키(예: GPG 키)를 보관하고 싶을 수도 있습니다.)

답변2

KeePass2라는 아주 좋은 도구가 있습니다(http://keepass.info/) 확장자(http://lechnology.com/software/keeagent/)

비밀번호, SSH 키 등을 저장할 수 있습니다(공식 KeePass 페이지에는 훨씬 더 유용한 확장 기능이 있습니다).
SSH 키를 사용하여 자동으로 로그인하려면 KeeAgent와 함께 PuTTY, Pageant 및 KeePass를 설치하기만 하면 됩니다. 올바르게 구성했다면 PuTTY, Pageant 또는 FileZilla에서 키를 설정할 필요가 없습니다.

제가 직접 사용하고 있는데 꽤 만족스럽습니다. 나는 30개 이상의 VPS와 루트 서버를 가지고 있으며 특정 양의 서로 다른 SSH 키를 가지고 있으며 내가 해야 할 유일한 일은 KeePass(내 기본 비밀번호 안전이 아님)를 연 다음 콘솔에 내 암호 문구를 입력하기만 하면 됩니다.

답변3

두 가지를 모두 실행하기 위해 동일한 사용자 계정을 사용하는 경우 브라우저에서 ~/.ssh/를 읽을 수 있다고 덧붙이고 싶습니다.

시도 해봐! 브라우저에서사적인홈 디렉토리에 키를 입력하세요. 재미있다.

따라서 다른 사용자 계정의 홈 디렉터리에 SSH 키를 저장하는 것이 좋습니다.

키를 보호하는 암호 문구

  • 요즘에는 무작위가 아닌 비밀번호를 크래킹하는 것이 매우 빠릅니다. 확인해 보세요해시캣
    • (무작위의 긴 12자 이상의 비밀번호는 여전히 무차별 공격에 꽤 오랜 시간이 걸립니다)
    • 따라서 AES로 암호화된 SSH 키는 좋은 긴 암호를 사용하는 한 가까운 미래에 해독될 수 없습니다. 보다깃허브 추천
  • 따라서 일부 웹사이트에서는 JavaScript 없이도 키를 추측할 수 있습니다. 그런 다음 키를 오프라인으로 무차별 공격합니다.
  • 그리고 브라우저도 JS를 사용하여 클립보드를 조사할 수 있습니다. 따라서 매우 긴 암호 문구를 복사하여 붙여넣으면 더욱 정교한 자바스크립트 공격에 노출될 위험이 있습니다.

look_at_keys.html

 9 <HTML>
10 <HEAD>
11 <TITLE>look at keys</TITLE>
12 </HEAD>
13 <FRAMESET cols="20%, 80%">
14   <FRAMESET rows="100, 200">
15       <FRAME src="/Users/yourname/.ssh/stuff.pem">
16       <FRAME src="blah.html">
17   </FRAMESET>
18   <FRAME src="contents_of_frame3.html">
19 </FRAMESET>
20 </HTML>

답변4

암호화된 파티션 내의 별도 디렉터리에 SSH 키를 저장할 수 있습니다. 그런 다음 다음을 사용하여 해당 디렉토리를 가리키는 SSH를 사용할 수 있습니다 -i.

ssh -i identity_file [email protected]

전체 설명( man ssh):

-i 신원_파일

공개키 인증을 위한 ID(개인키)를 읽어오는 파일을 선택합니다. 기본값은 프로토콜 버전 1의 경우 ~/.ssh/identity이고, 프로토콜 버전 2의 경우 ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 및 ~/.ssh/id_rsa입니다. ID 파일은 다음과 같습니다. 구성 파일에서 호스트별로 지정할 수도 있습니다.
여러 -i 옵션(및 구성 파일에 지정된 여러 ID)을 가질 수 있습니다. CertificateFile 지시어에 의해 인증서가 명시적으로 지정되지 않은 경우 ssh는 ID 파일 이름에 -cert.pub를 추가하여 얻은 파일 이름에서 인증서 정보를 로드하려고 시도합니다.

보안에 대한 나의 접근 방식은 정보를 개인 정보와 일반 정보로 나누는 것입니다. 집 전체 파티션을 암호화하고 싶지 않기 때문에 비밀 파일(예: ~/.ssh)을 암호화된 파티션에 복사합니다.

나는 이것이 다소 효율적인 보안을 제공한다고 생각합니다. 왜냐하면 맬웨어는 ~/.ssh에서 아무 것도 찾지 못할 것이고 아마도 전체 시스템이나 쉘 프로필을 스캔하여 해당 위치를 찾지 않을 것이기 때문입니다.

-F configfile 

구성 파일의 경로를 설정합니다.

추신: 별칭을 만들어 귀하의 alias ssh='ssh -i ... -F ...'프로필에 입력하겠습니다.

PPS 아직 확인하지 않았으며 다른 프로그램(git 등)이 이러한 ssh 설정과 어떻게 작동하는지 모르겠습니다.

관련 정보