gitlab 에 ssh 로 연결시 permission denied 에러 발생

 

원인

git 계정의 홈 디렉터리의 .ssh 폴더가 잘못된 SELinux 컨텍스트(context )를 갖고 있을 경우에 많이 발생한다

 

확인

.ssh 의 SELinux 레이블을 확인한다.

ls -ldZ ~/.ssh/
 
drwx------. git git unconfined_u:object_r:ssh_home_t:s0 /home/git//.ssh/

위와 같이 ssh_home_t context  여야 하며 다른 컨텍스트일 경우 SELinux 가 ssh 데몬이 저 폴더를 읽는 것을 차단하므로 인증된 공개키 파일(authorized_keys)을 읽지 못해서 에러가 발생한다.

 

SELinux 에러 로그 확인

 audit2why < /var/log/audit/audit.log
 
type=AVC msg=audit(1412569067.614:2916): avc:  denied  { read } for  pid=2781 comm="sshd" name="authorized_keys" dev=dm-2 ino=131169 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:initrc_tmp_t:s0 tclass=file
        Was caused by:
                Missing type enforcement (TE) allow rule.
                You can use audit2allow to generate a loadable module to allow this access.

 

조치

맞는 SELinux 레이블을 .ssh 폴더에 부여한다.

restorecon -R /home/git/.ssh