[[PageOutline]] = 공개키/개인키 생성 = == 1. (윈도우) OpenSSH 클라이언트 설치 == 윈도우에선 공개키/개인키 쌍을 만들기 위해서 OpenSSH 클라이언트를 설치해야 한다. 리눅스에선 openssh 패키지가 기본으로 설치되어 있으므로 신경쓸 필요가 없다. ​https://learn.microsoft.com/ko-kr/windows-server/administration/openssh/openssh_install_firstuse?tabs=gui&pivots=windows-11 (윈도우 11) 설정 > 시스템 > 선택적 기능 > 기능 보기 > 사용 가능한 기능 보기 > 'OpenSSH 클라이언트' 선택 (윈도우 10) 기본으로 설치되어 있다. 설치되어 있지 않다면, 설정 > 시스템 > 선택적 기능 > 기능 보기 > 기능 추가 > 'OpenSSH 클라이언트' 선택 == 2. 공개키/개인키 쌍 생성 == 아래 예처럼 우선 공개키/개인키 쌍을 생성한다. 키는 서버/클라이언트 어느 쪽에서 생성해도 되지만, 클라이언트에서 키를 생성하면 개인키를 클라이언트로 따로 옮길 필요가 없어 편하다. {{{ $ ssh-keygen -t ed25519 -a 200 -C "key for yongwoo" }}} * -t ed25519 : ed25519는 키 길이에 비해 가장 높은 보안 수준을 제공한다. 또한 ECDSA에서 발견되는 불안정성을 개선한다. RHEL 6 이하에서는 ed25519를 지원하지 않으므로 rsa 등을 써야 한다. * -a : 키 파생 함수의 라운드 수. 값이 클수록 안전하지만 로그인 세션을 초기화하는데 오래 걸린다. 디폴트 16. * -C : 설명 실행하면 어디다 저장할 것인지 passphrase는 어떻게 할것인지 물어보는데, 저장 위치는 디폴트로 하고 passphrase는 입력하지 않고 그냥 엔터를 치면 나중에 패스워드 입력 없이 진행할 수가 있다. 물어보지 않고 한방에 처리하려면 다음과 같이 한다. {{{ $ ssh-keygen -t ed25519 -a 200 -C "key for yongwoo" -f id_ed25519 -N '' }}} * -N : 새 passphrase를 지정한다. ed25519 키가 passphrase 없이 id_ed25519라는 파일명으로 저장된다. 생성되는 파일 중 .pub로 끝나는 파일이 공개키이고 .pub가 없는 파일이 개인키다. '''주의''' Putty에서 사용하기 위해서라면 키를 생성할 때 passphrase를 지정하지 말아야 한다. passphrase를 지정하면 PuTTYgen이 'unrecognised cipher name'이라면서 키를 읽어들이지 못한다. == 3. 공개키를 서버에 복사 == 공개키를 server에 복사한다. server에 저장할 파일명은 /etc/ssh/sshd_config 파일의 !AuthorizedKeysFile 항목에 정의된 것을 따른다. 디폴트 값은 .ssh/authorized_keys 이다. {{{ client$ ssh-copy-id -i ~/.ssh/id_ed25519 [id@]server }}} 굳이 ssh-copy-id를 이용하지 않고 sftp 등으로 옮겨도 된다. 그러나 .ssh/authorized_keys 파일을 이미 사용하고 있다면 덮어쓰지 않고 뒤에 추가해주기 때문에 ssh-copy-id를 이용하는 것이 편하다. 윈도우에선 OpenSSH 클라이언트를 설치해도 ssh-copy-id 멸령은 사용할 수 없으므로 다른 방법을 사용해야 한다. ssh-copy-id를 사용해서 공개키를 복사하지 않고 다른 방법을 이용했다면 서버에서 공개키 파일의 권한을 확인해야 한다. {{{ server$ chmod 700 ~/.ssh server$ chmod 600 ~/.ssh/authorized_keys }}} == 4. 개인키를 클라이언트에 보관 == 공개키/개인키 쌍을 클라이언트에서 생성하지 않았다면 개인키(.pub가 없는 파일)를 클라이언트의 ~/.ssh 디렉토리로 옮긴다. (클라이언트에서 생성했다면 이미 적절한 위치에 개인키 파일이 생성되어 있으므로 이 과정은 필요없다.) 옮긴 후에는 다음과 같이 권한 설정을 해야 한다. {{{ client$ chmod 700 ~/.ssh client$ chmod 600 ~/.ssh/id_ed25519 }}} 이렇게 공개키를 server에, 개인키를 클라이언트에 복사하면 공개키/개인키쌍으로 인증하기 때문에 따로 패스워드를 물어보지 않고 바로 접속할 수 있다. == 5. 비밀번호를 물어볼 때 == 위와 같이 했는데도 불구하고 server에 접속할 때 패스워드를 물어본다면 server의 로그 파일(/var/log/secure 파일 같은)을 살펴 본다. 로그에 {{{ Authentication refused: bad ownership or modes for directory }}} 와 같은 내용이 있다면 공개키 파일이나 공개키 파일의 디렉토리 권한이 너무 허술하게 되어 있다고 sshd가 판단해 공개키 파일을 읽지 않은 것이다. 따라서 공개키 파일, 공개키 파일이 속한 디렉토리가 자기 자신한테만 권한 부여가 되어 있는지 확인하고 잘못되어 있으면 바꿔 준다. 자기 자신한테만 권한을 부여해야 하므로 복잡하게 acl을 쓸 이유도 없고 써도 에러가 발생한다. 그래서 .ssh 디렉토리의 acl이 설정되어 있다면 이를 지워준다. {{{ setfacl -Rb ~/.ssh }}} == 6. Putty에서 개인키 사용 == Putty는 ssh-keygen으로 만든 개인키 파일을 그대로 사용하지 않는다. Putty에서 개인키를 사용하려면 PuTTYgen을 실행해서 개인키 파일을 Putty용 개인키 파일(.ppk)로 변경해야 한다. 'puttygen.exe' 실행 > 'Conversions'('변환') 메뉴 > Import key(키 불러오기) > 개인 키 파일을 선택 > 'Key Passphrase'('키 암호어구') 입력 > Save Private key(개인키 저장) - 개인키 파일에는 passphrase가 없어도 ppk 파일에만 Key Passphrase(키 암호어구)를 지정할 수 있다. 지정하지 않으면 비밀번호 입력없이 로그인 가능하다. 이렇게 생성한 Putty용 개인키는 Putty의 'Connection'('연결') > SSH > 'Auth' 메뉴에서 'private key for authentication'('인증 개인키 파일') 항목에 지정해주면 된다. === 6.1. Pageant === Pageant는 윈도우용 SSH 키 인증 에이전트 프로그램이다. Putty용 개인키 파일(.ppk)을 메모리에 저장하여 서버에 연결할 때 자동으로 사용할 수 있도록 해준다. 따라서 여러 번 로그인해야 하는 경우라면 편하다. 매번 키 파일을 지정하거나 'Key Passphrase'('키 암호어구')를 입력할 필요 없이 Pageant를 실행할 때 한번만 해주면 그 이후는 다시 할 필요가 없기 때문이다. 사용 방법은 다음과 같다. - pageant.exe 실행 > Add Key(키 추가) > ppk 파일 선택 > Key Passphrase(키 암호어구)가 있다면 입력 매번 키 파일을 추가해주는 것이 번거롭기 때문에 다음과 같이 배치 파일로 만드는 것이 편하다. {{{ @ECHO OFF START /B "Pageant" "C:\Program Files\iPuTTY\pageant.exe" "C:\Users\yongwoo\.ssh\yongwoo.ppk" }}} Pageant를 이용한다면 Putty의 'Connection'('연결') > SSH > 'Auth' 메뉴에서 private key for authentication'('인증 개인키 파일') 항목에 ppk 파일을 지정하는 것이 아니라 'Pageant를 이용하여 인증 시도'에 체크만 하면 된다. Filezilla나 WinSCP 처럼 Pageant를 지원하는 프로그램에서는 비밀번호를 비워두면 된다. ---- [WikiStart 처음으로]