authorized_keys 파일을 확인하는 도구를 만든 이야기

소개



배경



SSH라고 하면 공개키 암호를 사용한 공개키 인증 ( 참고: SSH 공개 키는 무엇입니까? ) 입니다만, 「열쇠를 서버에 등록했는데 로그인할 수 없다…」라고 하는 트러블이 끊이지 않습니다.

그래서, 문득 다음과 같은 것을 생각했습니다.


그래서 표제처럼 체크 툴을 만들어 보았기 때문에 기사로 하기로 했습니다.

전제



이번에는 CentOS 용 패키지에 손을 넣는 형태로 도구를 만들었습니다.
CentOS 8.1.1911 + OpenSSH 8.0p1 (openssh-8.0p1-4.el8_1)

패치 파일은 다음 github 리포지토리에 있습니다.
htps : // 기주 b. 코 m / 앙게 lp 57 / 쿠이타 - 사 mp ぇ / t ree / 뭐 r / sh sh st - d

도구 정보



도구의 이름은 "ssh-list-id"입니다.
서버의 입장에서 authorized_keys 파일에 등록된 열쇠를 리스트 업 하는 (우선한 것이 있으면 보고한다) 라고 하는 것으로, openssh-server 패키지에 추가하고 있습니다.

예를 들어, 다음과 같이 지문을 확인할 수 있는 키가 있었다고 해서,

수중 열쇠 확인 예
$ ssh-keygen -l -f ~/.ssh/id_ed25519.pub 
256 SHA256:yD3nJEK03pb5kurpxt+Wy35sQifd8vPCF3PTSFx1nfQ angel@cent8 (ED25519)
$ ssh-keygen -l -f ~/.ssh/id_rsa.pub 
4096 SHA256:ryZbBuLbavSaEVEIEbAEuL2dgG/GnIiPyvtcMiXCtwk angel@cent8 (RSA)

그것을 서버상의 authorized_keys 에 등록하고 있으면, 다음과 같이 리스트가 출력됩니다.

ssh-list-id로 등록된 키 목록
$ ssh-list-id
# authorized_keys file /home/angel/.ssh/authorized_keys:
line 1: SHA256:yD3nJEK03pb5kurpxt+Wy35sQifd8vPCF3PTSFx1nfQ
line 2: SHA256:ryZbBuLbavSaEVEIEbAEuL2dgG/GnIiPyvtcMiXCtwk

이것에 의해, 의도한 대로에 키가 등록되어 있는지, 서버상에서 확인할 수 있어 실제로 로그인해 보지 않으면 모른다고 하는 불안정한 상황을 개선할 수 있는 것은 아닐까, 라고 하는 것입니다.

또한 사용자에게 키 등록을 맡기지 않고 관리자가하는 장면에서도 루트 사용자라면 사용자 이름을 지정하여 실행할 수 있습니다.

사용자 이름 지정 실행
# ssh-list-id -u angel
# authorized_keys file /home/angel/.ssh/authorized_keys:
line 1: SHA256:yD3nJEK03pb5kurpxt+Wy35sQifd8vPCF3PTSFx1nfQ
line 2: SHA256:ryZbBuLbavSaEVEIEbAEuL2dgG/GnIiPyvtcMiXCtwk

그리고 서버의 입장에서와 같이, sshd와 같은 로직으로, 열쇠의 허가의 체크도 실시해 줍니다. 예를 들어, 다음과 같이 파일 자신의 권한이 좋지 않으면 경고를 줍니다.
로그인시에 원인을 알기 어려워 열쇠 등록시의 미비를 사전에 체크할 수 있다고 하는 것입니다.

권한 미비 시
$ ls -l ~/.ssh/authorized_keys   # グループのw権が過剰→パーミッション不備
-rw-rw-r--. 1 angel angel 830  5月  7 23:10 /home/angel/.ssh/authorized_keys
$ ssh-list-id
# authorized_keys file /home/angel/.ssh/authorized_keys:
Authentication refused: bad ownership or modes for file /home/angel/.ssh/authorized_keys
some problems occurred to open file /home/angel/.ssh/authorized_keys

그 외 , 서버의 입장에서라고 하는 것으로부터 , 실은 내부적으로 서버 설정 파일 ( 디폴트로 /etc/ssh/sshd_config ) 을 읽어들여 해석하고 있거나 합니다. 만약 디폴트 이외의 경우, -f 로 지정하는 것도 가능합니다.
※이하, undocumented하면서, 준비하고 있는 옵션의 일람입니다.

Usage
$ ssh-list-id -h
unknown option -- h
usage: ssh-list-id [-v] [-V] [-B|-E md5|-E sha256] [-u user] [-f sshd_config]
                   [-a authorized_keys] [-C connection_spec]

패키지 생성



패키지 생성은 기존 소스 RPM 파일에 패치를 적용하여 이루어집니다.
자세한 내용은 HOWTO.txt을 참조하십시오.

※ 만약을 위해서입니다만, 작성한 패키지를 이용되는 경우, 부디도 자기 책임으로 부탁합니다.

결론



필요한 기능은 이미 OpenSSH의 소스에 세트 갖추어져 있기 때문에, 어떻게 조합해 만드는지 집중하면 좋고 (빌드를 조정하기 위해 신경을 쓰는 장면은 있었지만) 비교적 편하게 만들 수 있다 라고 생각합니다.
OpenSSH가 등장하고 나서 상당히 시간이 지나고 있으므로, 본 툴의 기능에는 지금 갱감도 있습니다만, 본가에서도 이런 것 만들지 않는 것일까? 라고는 생각합니다.

좋은 웹페이지 즐겨찾기