| | 1 | [[PageOutline]] |
| | 2 | = 공개키/개인키 생성 = |
| | 3 | |
| | 4 | == 1. (윈도우) OpenSSH 클라이언트 설치 == |
| | 5 | 윈도우에선 공개키/개인키 쌍을 만들기 위해서 OpenSSH 클라이언트를 설치해야 한다. 리눅스에선 openssh 패키지가 기본으로 설치되어 있으므로 신경쓸 필요가 없다. |
| | 6 | |
| | 7 | https://learn.microsoft.com/ko-kr/windows-server/administration/openssh/openssh_install_firstuse?tabs=gui&pivots=windows-11 |
| | 8 | |
| | 9 | (윈도우 11) 설정 > 시스템 > 선택적 기능 > 기능 보기 > 사용 가능한 기능 보기 > 'OpenSSH 클라이언트' 선택 |
| | 10 | |
| | 11 | (윈도우 10) 기본으로 설치되어 있다. 설치되어 있지 않다면, 설정 > 시스템 > 선택적 기능 > 기능 보기 > 기능 추가 > 'OpenSSH 클라이언트' 선택 |
| | 12 | |
| | 13 | == 2. 공개키/개인키 쌍 생성 == |
| | 14 | 아래 예처럼 우선 공개키/개인키 쌍을 생성한다. 키는 서버/클라이언트 어느 쪽에서 생성해도 되지만, 클라이언트에서 키를 생성하면 개인키를 클라이언트로 따로 옮길 필요가 없어 편하다. |
| | 15 | {{{ |
| | 16 | $ ssh-keygen -t ed25519 -a 200 -C "key for yongwoo" |
| | 17 | }}} |
| | 18 | * -t ed25519 : ed25519는 키 길이에 비해 가장 높은 보안 수준을 제공한다. 또한 ECDSA에서 발견되는 불안정성을 개선한다. RHEL 6 이하에서는 ed25519를 지원하지 않으므로 rsa 등을 써야 한다. |
| | 19 | * -a : 키 파생 함수의 라운드 수. 값이 클수록 안전하지만 로그인 세션을 초기화하는데 오래 걸린다. 디폴트 16. |
| | 20 | * -C : 설명 |
| | 21 | 실행하면 어디다 저장할 것인지 passphrase는 어떻게 할것인지 물어보는데, 저장 위치는 디폴트로 하고 passphrase는 입력하지 않고 그냥 엔터를 치면 나중에 패스워드 입력 없이 진행할 수가 있다. |
| | 22 | |
| | 23 | 물어보지 않고 한방에 처리하려면 다음과 같이 한다. |
| | 24 | {{{ |
| | 25 | $ ssh-keygen -t ed25519 -a 200 -C "key for yongwoo" -f id_ed25519 -N '' |
| | 26 | }}} |
| | 27 | * -N : 새 passphrase를 지정한다. |
| | 28 | ed25519 키가 passphrase 없이 id_ed25519라는 파일명으로 저장된다. 생성되는 파일 중 .pub로 끝나는 파일이 공개키이고 .pub가 없는 파일이 개인키다. |
| | 29 | |
| | 30 | '''주의''' Putty에서 사용하기 위해서라면 키를 생성할 때 passphrase를 지정하지 말아야 한다. passphrase를 지정하면 PuTTYgen이 'unrecognised cipher name'이라면서 키를 읽어들이지 못한다. |
| | 31 | |
| | 32 | == 3. 공개키를 서버에 복사 == |
| | 33 | 공개키를 server에 복사한다. server에 저장할 파일명은 /etc/ssh/sshd_config 파일의 !AuthorizedKeysFile 항목에 정의된 것을 따른다. 디폴트 값은 .ssh/authorized_keys 이다. |
| | 34 | {{{ |
| | 35 | client$ ssh-copy-id -i ~/.ssh/id_ed25519 [id@]server |
| | 36 | }}} |
| | 37 | |
| | 38 | 굳이 ssh-copy-id를 이용하지 않고 sftp 등으로 옮겨도 된다. 그러나 .ssh/authorized_keys 파일을 이미 사용하고 있다면 덮어쓰지 않고 뒤에 추가해주기 때문에 ssh-copy-id를 이용하는 것이 편하다. |
| | 39 | |
| | 40 | 윈도우에선 OpenSSH 클라이언트를 설치해도 ssh-copy-id 멸령은 사용할 수 없으므로 다른 방법을 사용해야 한다. |
| | 41 | |
| | 42 | ssh-copy-id를 사용해서 공개키를 복사하지 않고 다른 방법을 이용했다면 서버에서 공개키 파일의 권한을 확인해야 한다. |
| | 43 | {{{ |
| | 44 | server$ chmod 700 ~/.ssh |
| | 45 | server$ chmod 600 ~/.ssh/authorized_keys |
| | 46 | }}} |
| | 47 | |
| | 48 | == 4. 개인키를 클라이언트에 보관 == |
| | 49 | 공개키/개인키 쌍을 클라이언트에서 생성하지 않았다면 개인키(.pub가 없는 파일)를 클라이언트의 ~/.ssh 디렉토리로 옮긴다. (클라이언트에서 생성했다면 이미 적절한 위치에 개인키 파일이 생성되어 있으므로 이 과정은 필요없다.) |
| | 50 | |
| | 51 | 옮긴 후에는 다음과 같이 권한 설정을 해야 한다. |
| | 52 | {{{ |
| | 53 | client$ chmod 700 ~/.ssh |
| | 54 | client$ chmod 600 ~/.ssh/id_ed25519 |
| | 55 | }}} |
| | 56 | |
| | 57 | 이렇게 공개키를 server에, 개인키를 클라이언트에 복사하면 공개키/개인키쌍으로 인증하기 때문에 따로 패스워드를 물어보지 않고 바로 접속할 수 있다. |
| | 58 | |
| | 59 | == 5. 비밀번호를 물어볼 때 == |
| | 60 | 위와 같이 했는데도 불구하고 server에 접속할 때 패스워드를 물어본다면 server의 로그 파일(/var/log/secure 파일 같은)을 살펴 본다. |
| | 61 | |
| | 62 | 로그에 |
| | 63 | {{{ |
| | 64 | Authentication refused: bad ownership or modes for directory |
| | 65 | }}} |
| | 66 | 와 같은 내용이 있다면 공개키 파일이나 공개키 파일의 디렉토리 권한이 너무 허술하게 되어 있다고 sshd가 판단해 공개키 파일을 읽지 않은 것이다. |
| | 67 | |
| | 68 | 따라서 공개키 파일, 공개키 파일이 속한 디렉토리가 자기 자신한테만 권한 부여가 되어 있는지 확인하고 잘못되어 있으면 바꿔 준다. |
| | 69 | |
| | 70 | 자기 자신한테만 권한을 부여해야 하므로 복잡하게 acl을 쓸 이유도 없고 써도 에러가 발생한다. 그래서 .ssh 디렉토리의 acl이 설정되어 있다면 이를 지워준다. |
| | 71 | {{{ |
| | 72 | setfacl -Rb ~/.ssh |
| | 73 | }}} |
| | 74 | |
| | 75 | == 6. Putty에서 개인키 사용 == |
| | 76 | |
| | 77 | Putty는 ssh-keygen으로 만든 개인키 파일을 그대로 사용하지 않는다. Putty에서 개인키를 사용하려면 PuTTYgen을 실행해서 개인키 파일을 Putty용 개인키 파일(.ppk)로 변경해야 한다. |
| | 78 | |
| | 79 | 'puttygen.exe' 실행 > 'Conversions'('변환') 메뉴 > Import key(키 불러오기) > 개인 키 파일을 선택 > 'Key Passphrase'('키 암호어구') 입력 > Save Private key(개인키 저장) |
| | 80 | - 개인키 파일에는 passphrase가 없어도 ppk 파일에만 Key Passphrase(키 암호어구)를 지정할 수 있다. 지정하지 않으면 비밀번호 입력없이 로그인 가능하다. |
| | 81 | |
| | 82 | 이렇게 생성한 Putty용 개인키는 Putty의 'Connection'('연결') > SSH > 'Auth' 메뉴에서 'private key for authentication'('인증 개인키 파일') 항목에 지정해주면 된다. |
| | 83 | |
| | 84 | === 6.1. Pageant === |
| | 85 | |
| | 86 | Pageant는 윈도우용 SSH 키 인증 에이전트 프로그램이다. Putty용 개인키 파일(.ppk)을 메모리에 저장하여 서버에 연결할 때 자동으로 사용할 수 있도록 해준다. |
| | 87 | |
| | 88 | 따라서 여러 번 로그인해야 하는 경우라면 편하다. 매번 키 파일을 지정하거나 'Key Passphrase'('키 암호어구')를 입력할 필요 없이 Pageant를 실행할 때 한번만 해주면 그 이후는 다시 할 필요가 없기 때문이다. |
| | 89 | |
| | 90 | 사용 방법은 다음과 같다. |
| | 91 | |
| | 92 | - pageant.exe 실행 > Add Key(키 추가) > ppk 파일 선택 > Key Passphrase(키 암호어구)가 있다면 입력 |
| | 93 | |
| | 94 | 매번 키 파일을 추가해주는 것이 번거롭기 때문에 다음과 같이 배치 파일로 만드는 것이 편하다. |
| | 95 | {{{ |
| | 96 | @ECHO OFF |
| | 97 | |
| | 98 | START /B "Pageant" "C:\Program Files\iPuTTY\pageant.exe" "C:\Users\yongwoo\.ssh\yongwoo.ppk" |
| | 99 | }}} |
| | 100 | |
| | 101 | Pageant를 이용한다면 Putty의 'Connection'('연결') > SSH > 'Auth' 메뉴에서 private key for authentication'('인증 개인키 파일') 항목에 ppk 파일을 지정하는 것이 아니라 'Pageant를 이용하여 인증 시도'에 체크만 하면 된다. |
| | 102 | |
| | 103 | Filezilla나 WinSCP 처럼 Pageant를 지원하는 프로그램에서는 비밀번호를 비워두면 된다. |
| | 104 | |
| | 105 | |
| | 106 | ---- |
| | 107 | [WikiStart 처음으로] |