CentOS 6/7에서 Server에서 RSA 공개키 설정을 해도 passwd 입력을 받을 때가 있다.

SELinux 가 활성화 되어 있는 경우 .ssh 폴더의 Type 설정이 제대로 되어 있지 않아서 발생한다.

해결 방법은 아래와 같다.

 

[ ssh 공개키 설정 시 확인 사항 ]

1. SELinux 비활성화

# SELinux 활성화 확인
[root@skt-ocs2th-test ~]# getenforce
Enforcing
# SELinux 비활성화
[root@skt-ocs2th-test ~]# setenforce 0
# SELinux 비활성화 확인
[root@skt-ocs2th-test ~]# getenforce
Permissive

## selinux 설정 파일 변경 enforcing -> disabled
vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disabled

2. SELinux 활성화 시 확인 사항

2-1. restorecon 명령어로 SELinux 보안 Context 복구한다. ( type이 ssh_home_t로 설정되어야 한다.)

[jenkins@skt-ocs2th-test ~]$ restorecon -R -v ~/.ssh
restorecon reset /home/jenkins/.ssh context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /home/jenkins/.ssh/id_rsa context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /home/jenkins/.ssh/authorized_keys context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /home/jenkins/.ssh/id_rsa.pub context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
[jenkins@skt-ocs2th-test ~]$
[jenkins@skt-ocs2th-test ~]$ ls -Z .ssh
-rw-------. jenkins jenkins unconfined_u:object_r:ssh_home_t:s0 authorized_keys
-rw-------. jenkins jenkins unconfined_u:object_r:ssh_home_t:s0 id_rsa
-rw-r--r--. jenkins jenkins unconfined_u:object_r:ssh_home_t:s0 id_rsa.pub

2-2. restorecon 명령어를 수행해도 ssh_home_t로 복구 되지 않는 경우

 - 이 경우 해당 계정의 home이 /var/lib과 같이 특수한 directory 아래에 생성되었다면 SELinux의 다른 Type 설정에 따라 ssh_home_t가 설정되지 않을 수 있다.

 - 아래의 경우 jenkins 계정의 home은 /var/lib이기 때문에 .ssh 폴더의 type이 var_lib_t로 되어 있다.

[jenkins@skt-ocs2th ~]$ ls -aZ
drwx------. jenkins jenkins system_u:object_r:var_lib_t:s0   .
drwxr-xr-x. root    root    system_u:object_r:var_lib_t:s0   ..
-rw-------. jenkins jenkins unconfined_u:object_r:var_lib_t:s0 .bash_history
-rw-r--r--. jenkins jenkins system_u:object_r:var_lib_t:s0   .bash_logout
-rw-r--r--. jenkins jenkins system_u:object_r:var_lib_t:s0   .bash_profile
-rw-r--r--. jenkins jenkins system_u:object_r:var_lib_t:s0   .bashrc
drwx------. jenkins jenkins unconfined_u:object_r:var_lib_t:s0 .ssh
-rw-------. jenkins jenkins unconfined_u:object_r:var_lib_t:s0 .viminfo

 - /etc/selinux/targeted/contexts/files/file_contexts 파일에서 해당 계정에 맞는 path를 지정해서 ssh_home_t로 바꿔준다.

/var/lib(/.*)?  system_u:object_r:var_lib_t:s0
/var/lib(/.*)/.ssh(/.*)?        unconfined_u:object_r:ssh_home_t:s0

 - restorecon 명령어로 SELinux 보안 Context 변경한다.

[jenkins@skt-ocs2th .ssh]$ restorecon -R -v ~/.ssh
restorecon reset /var/lib/jenkins/.ssh/id_rsa context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /var/lib/jenkins/.ssh/authorized_keys context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /var/lib/jenkins/.ssh/id_rsa.pub context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0

 

CentOS 6/7에서 RSA ssh 공개키로 접속하는 방법.

 

[ Server 장비 ]

1. sshd 설정 변경

vi /etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile   .ssh/authorized_keys

- AuthorizedKeysFile의 경우 %u는 해당 계졍의 username이며, %h는 해당 계정의 home path를 뜻한다.

# /etc/ssh/<username>/authorized_keys 에서 관리하고 싶은 경우
AuthorizedKeysFile   /etc/ssh/%u/authorized_keys

# ~/.ssh/authorized_keys 에서 관리하고 싶은 경우
AuthorizedKeysFile   %h/.ssh/authorized_keys

2. sshd 재시작

# CentOS 6
service sshd restart

# CentOS 7
systemctl restart sshd

3. 접속하려는 계정의 .ssh 폴더 및 .ssh/authorized_keys 권한 설정

chmod go-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

 

[ Client 장비 ]

1. RSA 공개키 생성

hjshuMBP:.ssh hjshu$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hjshu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/hjshu/.ssh/id_rsa.
Your public key has been saved in /Users/hjshu/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:qWkd3w98lVXLZDpfU3uQYb/ZQ924mkuBHYSwj8E3WRs hjshu@hjshuMBP.local
The key's randomart image is:
+---[RSA 2048]----+
|        .. .E +=o|
|       . ..+ +*+B|
|        + + oo.*B|
|         * + .+.X|
|        S o o .*o|
|       + o o + ..|
|      + . . B .  |
|     .     . =   |
|            . .  |
+----[SHA256]-----+

 

2. 공개키 확인

# cat .ssh/id_rsa.pub

3. 해당 공개키를 접속하고 싶은 서버 계정의  ~/.ssh/authorized_keys에 추가해준다.

[jenkins@skt-ocs2th ~]$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCg3PdtVO5qB5l2Q1PEm8cU2f/zdrXN0eKIAqc7QAvp7xFEwIczxPhnkwYbRh+4Yp9Y+aarBaA/mvNoZSMuxKZqEaVXzlZX5rOJuDK+GepyFvDU1D9k+CmycJkeFbmr1cMuL0e19l7zccWmQFbkMmhj0mSJX+yApPixFGcpCL/h7pQi6lkJeiStIuLlkJnQGbntPA8JCLm4mZdrGBvQFbs61lhVmkJNqddDWbrnybwK2CRrfXCzud6lsvmh2vZnrimBDAayytGwDBI3+7+C9C6ueGId8DLi3Aqe37ikzgpa9wXDjGEipTnUjrIA6FjzdVAPG3t6D2QV3F3NS7aIk3Ob hjshu@hjshuMBP.local


이 작업 이후 부터 Client가 Server로 접속 시 passwd 입력 없이 접속이 가능해진다.

+ Recent posts