CentOS 6/7 기준!

 

OpenSSH 공개키를 배포 시에 특정 계정이 /home 밑에 생성되는 것이 아닌 /var/lib 등 공유 디렉터리에서 생성 시에 authorized_keys 파일을 참조하지 않는 상황이 발생 SELinux를  Disabled 혹은 Permissive 하면 해결된 문제였으나, 훌륭하신 과장님께서 해결 방안을 찾아주셨다.

 


키 생성 및 기본적인 공개키 배포 실시

Server 작업

useradd -d /var/lib/test_ssh test_ssh

passwd test_ssh
#test_ssh 사용자의 비밀 번호 변경 중
#새  암호: test.123
#잘못된 암호: 암호에 어떤 형식으로 사용자 이름이 포함되어 있습니다
#새  암호 재입력: test.123
#passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.

su - test_ssh

pwd
#/var/lib/test_ssh

mkdir .ssh

chmod 700 .ssh

Client 작업

*copy-id가 없을 경우 수동으로 넣어주면됩니다.

ssh-keygen -t rsa
#해당질문에 알아서 Enter

ssh-copy-id test_ssh@[server IP]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "[홈 디렉터리명]/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
test_ssh@[server IP]'s password:

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh 'test_ssh@[server IP]'"
and check to make sure that only the key(s) you wanted were added.

해당 작업이 완료된다면 기본적으로 test_ssh/.ssh 밑에 authorized_keys파일이 생성됨

cd .ssh
ls -ltr
#합계 4
#-rw-------. 1 test_ssh test_ssh 567  5월  7 17:51 authorized_keys

 


로그인시 동일하게 패스워드를 물어봐 버리네?

ssh test_ssh@[server IP]
test_ssh@[server IP]1's password:

 

CentOS 6버전에서 발생하는 SElinux버그다.

기본적으로 User home디렉터리를 지정생성시 자동으로 Selinux에 추가 반영을 해야하나,

하지 않아서 발생하는 문제다. 

*CentOS 7에서는 해당 버그는 패치되었다.


해결책

해결책은 2개다.

1) SELinux Disable

2) vi /etc/selinux/targeted/contexts/files/file_contexts 에서 필드를 수정

 

보안을 위해서라면 2번 방법이 안정적이다.

vi /etc/selinux/targeted/contexts/files/file_contexts

/var/lib/[^/]+/\.ssh(/.*)?     system_u:object_r:ssh_home_t:s0
#/var/lib로 시작하는 지점에 적절한 위치에 추가한다.
#SELinux정규식 구문이니 필요한것 찾아서!

su - test_ssh
#이후 사용자 계정으로 로그인

restorecon -R -v .ssh/
#수정된 SELinux 보안 문맥을 맞추기위해 restorecon 명령어를 사용한다.

#restorecon reset /var/lib/test_ssh/.ssh context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
#restorecon reset /var/lib/test_ssh/.ssh/authorized_keys context unconfined_u:object_r:var_lib_t:s0->unconfined_u:object_r:ssh_home_t:s0
#출력은 위와 같다.

 

'리눅스' 카테고리의 다른 글

SSH 공개키 authorized_keys 경로 변경  (0) 2020.05.07

Nova backup 커맨드를 사용하여 이미지를 백업 시 Status를 체크해야 하는 주의사항이 있어 메모한다.

 

기본적인 nova backup 커맨드 수행 시 nova image-list로도 확인은 가능합니다.

*이 포스팅 글에서는 nova image-list 커맨드가 수행이 안될 경우 (오픈스택 버전마다 상이)에 확인할 수 있는 방법입니다.


1.VM 스냅샷

nova backup [VM 명] [VM 백업명] {daily, weekly}
#해당 VM 명을 가지고 Snapshot 형태의 이미지를 만듭니다.

2. 스냅샷 중인 이미지 UUID 확인

glance image-list | grep [VM 백업명] | awk '{print $2}'
#nova backup으로 만든 이미지는 자동으로 glance에 업로딩 됩니다.
#해당 커맨드를 사용하여 이미지 UUID를 확인합니다.

3. 확인된 UUID 정보를 가지고 스냅샷 진행 상황 확인이 가능합니다.

glance image-show [VM 백업 UUID] | grep stauts
#해당 이미지에 대한 snapshot 진행 상황 확인가능합니다. saving -> active

오픈스택 서버 장애 시 복구를 위한 환경설정 파일 및 VM 인스턴스를 스냅샷 및 이미지 다운으로를 활용하여 시스템을 백업합니다.

[동작원리]

이전 포스팅에서 컨트롤러가 정상적으로 VM을 백업하지 못하는 상황에서 사용할 수 있는 스크립트이다.

 

Openstack controller가 배포하는 VM들은 각 가용 영역에 돌아가면서 Compute 노드 정확히는 Nova 노드에 VM이 생성된다.
즉, 실제 VM은 Controller가 아닌 Compute가 가지고 있는 것이 정확하다, 그렇기 때문에 해당 Compute 노드에 접속하여  Qcow2로 Convert를 수행한다.
1. virsh 커맨드를 사용하여 해당 KVM 정보를 색출한다.  VM 백업 시 사용할 이름과 해당  UUID 정보를 추출

2. qemu-img 커맨드를 사용하여 해당 파일을 qcow2로 변환

3. 선택사항에 따라 2가지 작업으로 나눌 수 있다.
    - 해당 이미지를 Controller에 Glance로 바로 Upload

[스크립트는 게속 보정중입니다.]


[컴퓨트노드에서 인스턴스 qcow2파일로 변환 스크립트]

#!/bin/bash
########## INFO LIST ##########
HOSTNAME=`hostname`
BACK_DATE1=`date +%Y%m%d`
BACK_DATE2=`date +%Y-%m-%d_%H:%M:%S`
BACK_TIME=`date +%H:%M:%S.%3N`
FILE_NAME=`basename "${OPS_BACK_DIR}/1.SCRIPT/1.OP_CONTROL_BK"`

########## Backup directory path ##########
OPS_BACK_DIR="/root/OPS"
OPS_LOG_DIR="${OPS_BACK_DIR}/1.SCRIPT/script_log/${HOSTNAME}_${BACK_DATE1}_recovery_script.log"

KEY_AUTH_DIR="${OPS_BACK_DIR}/0.AUTH"

INS_BACK_DIR="/var/lib/nova/instances/vm_backup"
INS_RESIZE_DIR="/var/lib/nova/instances/vm_backup/resize"

########## Keystone LIST ##########
#User(Teanet ID) command openrc!!!
source ${KEY_AUTH_DIR}/admin-openrc

if [ ! -d "${INS_BACK_DIR}" ] ; then
        mkdir -p ${INS_BACK_DIR}
fi

if [ ! -d "${INS_RESIZE_DIR}" ] ; then
        mkdir -p ${INS_RESIZE_DIR}
fi

INS_LIST=`virsh list --all | grep -Ev "Name|---" | awk '{print $2}'`

for name in ${INS_LIST} ; do
        INT_NAME=`virsh dumpxml ${name} | grep -E "nova:name" | awk -F '[<>]' '{print $3}'`
        INS_UUID=`virsh dumpxml ${name} | grep -E "source file" | grep "disk"  | tr "'" "=" | awk -F '[=]' '{print $3}'`

        #instance -> qcow2 Convert
        qemu-img convert -f qcow2 -O qcow2 ${INS_UUID}  ${INS_BACK_DIR}/${INS_NAME}_orig.qcow2 -p
        #qcow2 -> resize qcow2 Convert
        qemu-img convert -c -O qcow2 ${INS_BACK_DIR}/${INS_NAME}_orig.qcow2 ${INS_RESIZE_DIR}/${INS_NAME}.qcow2

        image_file="${INS_RESIZE_DIR}/${INS_NAME}.qcow2"

        #choise First : compute -> controller qcow image uploading
        nohup glance image-create --name ${INS_NAME} --file ${image_file} --disk-format qcow2 --container-format bare --visibility public --progress &

        #choise Second : compute qcow image file -> scp controller send
        #scp -i /root/.ssh/OPS_id-rsa -oStrictHostKeyChecking ${INS_RESIZE_DIR}/${INS_NAME}.qcow2 root@ops_controller:/OPS/img_back & 
done

+ Recent posts