하나의 가상 머신이 생성된다고 하면 – Novas는 Hypervisor로써 coumpute 노드로 설정된 노드들의 CPU와 RAM에 연결된다. – Neutron은 네트워크 노드로 설정된 노드들의 네트워크 인터페이스와 연결된다. – Cinder는 블록스토리지로 스토리지 노드들의 HDD(SSD 등)과 연결된다. 기본적으로 이 세 개의 모듈이 노드들의 자원을 획득하고 하나의 가상머신에 자원이 된다.
Glance와 Swift는 가상머신과 직접 연결되지 않는 것을 알 수 있는데 이는 Cinder와 달리 두 서비스는 가상머신에 가상디바이스를 직접 제공하지 않기 때문이다.
Horizon은 사용자가 openstack과 소통하기 위한 창구다. 웹 UI와 CLI를 제공한다. Keystone은 사용자와 모듈을 식별한다.
RabbitMQ는 오픈 소스 메시지 브로커 소프트웨어(메시지 지향 미들웨어)로서, AMQP를 구현하였으며 그 이후로 STOMP ,MQTT 등의 프로토콜을 지원하기 위해 플러그인 구조와 함께 확장되고 있다. 메시지를 생산하는 생산자(Producer)가 메시지를 큐에 저장해 두면, 메시지를 수신하는 소비자(Consumer)가 메시지를 가져와 처리하는 Publish/Subscribe 방식의 메시지 전달 브로커이다.
rabbitmq 서버는 controller 노드에만 설치한다.
패키지 설치
[root@openstack1:~]#yum -y install rabbitmq-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.kakao.com
Package rabbitmq-server-3.6.16-1.el7.noarch already installed and latest version
Nothing to do
서비스 등록 및 구동
[root@openstack1:~]#systemctl enable rabbitmq-server.service
[root@openstack1:~]#systemctl start rabbitmq-server.service
# 또는
[root@openstack1:~]#chkconfig rabbitmq-server on
알림: 'systemctl enable rabbitmq-server.service'에 요청을 전송하고 있습니다.
[root@openstack1:~]#service rabbitmq-server start
Redirecting to /bin/systemctl start rabbitmq-server.service
사용자(계정) 생성
# rabbitmqctl add_user ACCOUNT PASSWORD
[root@openstack1:~]# rabbitmqctl add_user openstack openstack
Creating user "openstack"
# 기존 사용자를 삭제하려면 add_user 대신 delete_user명령을 사용하면 된다.
권한 부여
[root@openstack1:~]#rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"
Chrony는 NTP(Network Time Protocol) 을 구현한 server/client 로 기존 리눅스의 ntpd 를 대체로 CentOS 8부터는 NTP가 아니라 chrony가 기본으로 동작한다.
노드간 시간을 동일하게 맞추기 위한 설정이다. 1 hadoop eco system 등 여러 노드를 하나로 묶어 클러스터링 하는 경우 시간이 다를 경우 예기치 못한 문제가 발생할 수있다.2특히 Apache kudu 의 경우는 ntp 설정이 돼있지 않으면 아예 동작하지 않는다. 기존 NTP서버를 이용하면 된다.
패키지는 모든 노드에 설치 해야 하되 서버가 될 서버와 클라이언트의 설정을 다르게 해줘야 한다.
패키지 설치
[root@openstack1:~]# yum -y install chrony
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.kakao.com
Package chrony-3.4-1.el7.x86_64 already installed and latest version
Nothing to do
설정
서버와 클라이언트 모두 같은 패키지지만 설정 내용으로 구분된다.
서버 설정
[root@openstack1:~]# vi /etc/chrony.conf
# 모두 지우고 아래 내용을 붙여넣기 한다.
# NTP 서버 주소를 확인한다.
server 192.168.4.254 iburst
server 3.centos.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
# NTP서버가 될 노드는 반드시 allow 로 바꿔줘야 한다.
allow 192.168.0.0/16
logdir /var/log/chrony
클라이언트 설정
[root@openstack1:~]# vi /etc/chrony.conf
# 모두 지우고 아래 내용을 붙여넣기 한다.
# NTP 서버 주소를 확인한다. chrony 서버 주소를 추가한다.
server openstack1 iburst
server 3.centos.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
# NTP서버가 아니므로 주석처리 한다.
#allow 192.168.0.0/16
logdir /var/log/chrony
서비스 등록 및 구동
모든 노드에서 수행한다. 서버 시작 후 클라이언트 노드도 서비스를 시작한다.
[root@openstack1:~]# service chronyd restart
Redirecting to /bin/systemctl restart chronyd.service
[root@openstack1:~]#chkconfig chronyd on
알림: 'systemctl enable chronyd.service'에 요청을 전송하고 있습니다.
구동 확인
# 서버에서 수행한 결과
[root@openstack1:~]# chronyc sources
210 Number of sources = 2
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.4.254 4 6 37 32 +7332ns[ -24ms] +/- 13ms
^? ec2-13-209-84-50.ap-nort> 0 7 0 - +0ns[ +0ns] +/- 0ns
# 클라이언트에서 수행한 결과
# chrony 서버 IP가 출력 되는 것을 확인할 수 있다.
# ^* 호스트(IP)가 출력되면 된다.
[root@openstack2:~]#chronyc sources
210 Number of sources = 2
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ openstack1 5 6 377 31 -37ms[ -33ms] +/- 55ms
^* 192.168.4.254 4 6 377 50 -59ms[ -54ms] +/- 12ms
공용 repository로 사용되는 RDBMS가 필요하다. Mysql, MariaDB, PostgresQL을 리포지터리로 사용할 수 있다. MySQL설치 포스트를 참고해서 설치 할 수 있다.
Controller 노드에서만 수행한다. 또는 별도의 DB서버에서만 수행한다.
서버 설치
[root@openstack1:~]# yum -y install mariadb mariadb-server python2-PyMySQL
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.kakao.com
Package 3:mariadb-server-10.3.10-1.el7.0.0.rdo2.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package python2-PyMySQL.noarch 0:0.9.2-2.el7 will be installed
Verifying : python2-PyMySQL-0.9.2-2.el7.noarch 1/1
Installed:
python2-PyMySQL.noarch 0:0.9.2-2.el7
Complete!
클라이언트 및 관련 라이브러리 설치 서버를 제외한 나머지 노드에서 수행한다.
yum -y install mariadb python2-PyMySQL
config 변경
# /etc/my.cnf 파일을 수정해도 된다.
[root@openstack1:~]# /etc/my.cnf.d/openstack.cnf
# openstack.cnf 파일은 빈파일이다.
# 아래 내용을 붙여넣는다.
[mysqld]
#bind-address를 주석처리 하면 기본 값으로 설정된다.
bind-address = 서버_IP
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
서비스 활성화
# Service 시작
[root@openstack1:~]#service mariadb start
Redirecting to /bin/systemctl start mariadb.service
[root@openstack1:~]#chkconfig mariadb on
알림: 'systemctl enable mariadb.service'에 요청을 전송하고 있습니다.
Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
# 또는
[root@openstack1:~]# systemctl enable mariadb.service
[root@openstack1:~]# systemctl start mariadb.service
기본적으로 CentOS extra 저장소는 openstack 저장소 활성화를 위한 rpm을 포함하고 있다. 그러니까 별도의 yum repository 설정을 한다거나 할 필요가 없다는 이야기이다. 오픈스택은 매 6개월마다 릴리즈된다. 버전은 알파멧 순서로 매겨진다. 여기에서 확인할 수있다.
오픈스택 저장소 활성화
# 예제의 경우 stein 이 버전이다.
[root@openstack1:~]# yum -y install centos-release-openstack-stein
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.kakao.com
Resolving Dependencies
--> Running transaction check
---> Package centos-release-openstack-stein.noarch 0:1-1.el7.centos will be installed
--> Processing Dependency: centos-release-qemu-ev for package: centos-release-openstack-stein-1-1.el7.centos.noarch
...중략...
Verifying : centos-release-qemu-ev-1.0-4.el7.centos.noarch 6/6
Installed:
centos-release-openstack-stein.noarch 0:1-1.el7.centos
Dependency Installed:
centos-release-ceph-nautilus.noarch 0:1.2-2.el7.centos centos-release-nfs-ganesha28.noarch 0:1.0-3.el7.centos centos-release-qemu-ev.noarch 0:1.0-4.el7.centos centos-release-storage-common.noarch 0:2-2.el7.centos
centos-release-virt-common.noarch 0:1-1.el7.centos
Complete!
/etc/profile 혹은 /root/.bash_profile을 수정한다. – /etc/profile : 모든 사용자에 적용된다. 어떤 계정이건 bash가 실행 될 때 파일을 읽는다. – /root/.bash_profile : root 계정에 적용된다. – /home/계정명/.bash_profile : 해당 계정에 적용된다.
[root@openstack1:~]# vi /etc/profile
# 파일 끝에 아래를 붙여넣는다.
# shell prompt를 보기 편하게 하기 위한 설정.
export PS1="[\[\033[38;5;45m\]\u@\[$(tput sgr0)\]\[\033[38;5;15m\]\h:\w]\\$\[$(tput sgr0)\]"
# 만약 vim이 설치돼 있지 않다면 아래 라인은 주석처리하거나, vim을 설치해야 한다.
alias vi=vim
#영문, UTF8로 설정
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
CentOS 7 에 install 하는것으로 가정한다. CentOS 8 Linux 설치를 참고하여 최소설치 모드로 리눅스를 설치한다. 네트워크 설정을 변경한다. (NIC는 2개 이상이 필요하다. 외부 연결용, 노드간 통신 용) root 권한으로 해야 하는 작업이 많다. root 패스워드를 설정하거나, SuDo : SuperUser Do를 참고하여 sudo 사용 설정을 한다. 클러스터간 설치 및 통신 용의성 확보를 위해 SSH설정을 참고하여 키를 등록한다. openstack train 기준으로 진행한다.
네트워크설정, ssh 키 설정 등이 완료 됐으면 서비스 설정을 변경한다. openstack 클러스터의 구성 노드 모두에서 작업 해줘야 한다.
# 노드간 통신의 용의성을 위해 방화벽 서비스를 종료한다.
[HOSTNAME:/haedong]$ sudo systemctl disable firewalld
[HOSTNAME:/haedong]$ sudo service firewalld stop
# Network 관리 서비스인데 개인적으로 아주 고약한 녀석이다.
# 아무리 설정을 바꿔도 제 멋대로 설정을 덮어 써버리는 경우가 허다하므로 종료한다.
# 어차피 네트워크는 별도로 관리해야 한다.
[HOSTNAME:/haedong]$ sudo systemctl disable NetworkManager
[HOSTNAME:/haedong]$ sudo service NetworkManager stop
# 만약을 위해 서비스를 재시작하고, 항상 서비스가 구동도록 설정한다.
[HOSTNAME:/haedong]$ sudo systemctl enable network
[HOSTNAME:/haedong]$ sudo service network restart
packstack1RDO project의 puppet module을 이용한 CentOS 및 Redhat linux 용 openstack 자동 배포 유틸리티이다. 관련 리포지터리 및 패키지 설치
# 만약 epel-release 리포지터리가 추가되어있다면 삭제한다.(혹은 disable로 변경해도 된다.)
[HOSTNAME:/home/haedong]$ sudo rm /etc/yum.repos.d/epel
rm: remove 일반 파일 `epel-testing.repo'? y
rm: remove 일반 파일 `epel.repo'? y
# packstack repo 설치
[HOSTNAME:/home/haedong:]$ sudo yum install -y https://www.rdoproject.org/repos/rdo-release.rpm
[sudo] haedong의 암호:
Loaded plugins: fastestmirror, langpacks
rdo-release.rpm | 6.7 kB 00:00:00
Examining /var/tmp/yum-root-URQvAZ/rdo-release.rpm: rdo-release-train-1.noarch
Marking /var/tmp/yum-root-URQvAZ/rdo-release.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package rdo-release.noarch 0:train-1 will be installed
--> Finished Dependency Resolution
base/7/x86_64 | 3.6 kB 00:00:00
Dependencies Resolved
=====================================================================================================================================================================================
Package Arch Version Repository Size
=====================================================================================================================================================================================
Installing:
rdo-release noarch train-1 /rdo-release 3.1 k
Transaction Summary
=====================================================================================================================================================================================
Install 1 Package
Total size: 3.1 k
Installed size: 3.1 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : rdo-release-train-1.noarch 1/1
Verifying : rdo-release-train-1.noarch 1/1
Installed:
rdo-release.noarch 0:train-1
Complete!
# openstack train 패키지 설치
[HOSTNAME:/home/haedong:]$ sudo yum install -y centos-release-openstack-train
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
* base: mirror.kakao.com
* extras: mirror.kakao.com
* openstack-train: mirror.kakao.com
* rdo-qemu-ev: mirror.kakao.com
* updates: mirror.kakao.com
openstack-train | 3.0 kB 00:00:00
rdo-qemu-ev | 3.0 kB 00:00:00
(1/2): rdo-qemu-ev/x86_64/primary_db | 57 kB 00:00:00
(2/2): openstack-train/x86_64/primary_db | 1.1 MB 00:00:00
Resolving Dependencies
--> Running transaction check
---> Package centos-release-openstack-train.noarch 0:1-1.el7.centos will be installed
--> Processing Dependency: centos-release-qemu-ev for package: centos-release-openstack-train-1-1.el7.centos.noarch
--> Processing Dependency: centos-release-ceph-nautilus for package: centos-release-openstack-train-1-1.el7.centos.noarch
--> Running transaction check
---> Package centos-release-ceph-nautilus.noarch 0:1.2-2.el7.centos will be installed
--> Processing Dependency: centos-release >= 7-5.1804.el7.centos.2 for package: centos-release-ceph-nautilus-1.2-2.el7.centos.noarch
--> Processing Dependency: centos-release-storage-common for package: centos-release-ceph-nautilus-1.2-2.el7.centos.noarch
--> Processing Dependency: centos-release-nfs-ganesha28 for package: centos-release-ceph-nautilus-1.2-2.el7.centos.noarch
---> Package centos-release-qemu-ev.noarch 0:1.0-4.el7.centos will be installed
--> Processing Dependency: centos-release-virt-common for package: centos-release-qemu-ev-1.0-4.el7.centos.noarch
--> Running transaction check
---> Package centos-release.x86_64 0:7-5.1804.el7.centos will be updated
---> Package centos-release.x86_64 0:7-9.2009.1.el7.centos will be an update
---> Package centos-release-nfs-ganesha28.noarch 0:1.0-3.el7.centos will be installed
---> Package centos-release-storage-common.noarch 0:2-2.el7.centos will be installed
---> Package centos-release-virt-common.noarch 0:1-1.el7.centos will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=====================================================================================================================================================================================
Package Arch Version Repository Size
=====================================================================================================================================================================================
Installing:
centos-release-openstack-train noarch 1-1.el7.centos extras 5.3 k
Installing for dependencies:
centos-release-ceph-nautilus noarch 1.2-2.el7.centos extras 5.1 k
centos-release-nfs-ganesha28 noarch 1.0-3.el7.centos extras 4.3 k
centos-release-qemu-ev noarch 1.0-4.el7.centos extras 11 k
centos-release-storage-common noarch 2-2.el7.centos extras 5.1 k
centos-release-virt-common noarch 1-1.el7.centos extras 4.5 k
Updating for dependencies:
centos-release x86_64 7-9.2009.1.el7.centos updates 27 k
Transaction Summary
=====================================================================================================================================================================================
Install 1 Package (+5 Dependent packages)
Upgrade ( 1 Dependent package)
Total download size: 62 k
Downloading packages:
No Presto metadata available for updates
(1/7): centos-release-7-9.2009.1.el7.centos.x86_64.rpm | 27 kB 00:00:00
(2/7): centos-release-ceph-nautilus-1.2-2.el7.centos.noarch.rpm | 5.1 kB 00:00:00
(3/7): centos-release-nfs-ganesha28-1.0-3.el7.centos.noarch.rpm | 4.3 kB 00:00:00
(4/7): centos-release-qemu-ev-1.0-4.el7.centos.noarch.rpm | 11 kB 00:00:00
(5/7): centos-release-storage-common-2-2.el7.centos.noarch.rpm | 5.1 kB 00:00:00
(6/7): centos-release-openstack-train-1-1.el7.centos.noarch.rpm | 5.3 kB 00:00:00
(7/7): centos-release-virt-common-1-1.el7.centos.noarch.rpm | 4.5 kB 00:00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 650 kB/s | 62 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Updating : centos-release-7-9.2009.1.el7.centos.x86_64 1/8
warning: /etc/yum/vars/contentdir created as /etc/yum/vars/contentdir.rpmnew
Installing : centos-release-storage-common-2-2.el7.centos.noarch 2/8
Installing : centos-release-nfs-ganesha28-1.0-3.el7.centos.noarch 3/8
Installing : centos-release-ceph-nautilus-1.2-2.el7.centos.noarch 4/8
Installing : centos-release-virt-common-1-1.el7.centos.noarch 5/8
Installing : centos-release-qemu-ev-1.0-4.el7.centos.noarch 6/8
Installing : centos-release-openstack-train-1-1.el7.centos.noarch 7/8
Cleanup : centos-release-7-5.1804.el7.centos.x86_64 8/8
Verifying : centos-release-openstack-train-1-1.el7.centos.noarch 1/8
Verifying : centos-release-nfs-ganesha28-1.0-3.el7.centos.noarch 2/8
Verifying : centos-release-7-9.2009.1.el7.centos.x86_64 3/8
Verifying : centos-release-ceph-nautilus-1.2-2.el7.centos.noarch 4/8
Verifying : centos-release-virt-common-1-1.el7.centos.noarch 5/8
Verifying : centos-release-storage-common-2-2.el7.centos.noarch 6/8
Verifying : centos-release-qemu-ev-1.0-4.el7.centos.noarch 7/8
Verifying : centos-release-7-5.1804.el7.centos.x86_64 8/8
Installed:
centos-release-openstack-train.noarch 0:1-1.el7.centos
Dependency Installed:
centos-release-ceph-nautilus.noarch 0:1.2-2.el7.centos centos-release-nfs-ganesha28.noarch 0:1.0-3.el7.centos centos-release-qemu-ev.noarch 0:1.0-4.el7.centos
centos-release-storage-common.noarch 0:2-2.el7.centos centos-release-virt-common.noarch 0:1-1.el7.centos
Dependency Updated:
centos-release.x86_64 0:7-9.2009.1.el7.centos
Complete!
# 설치 된 패키지 업데이트.
[HOSTNAME:/home/haedong:]$ sudo yum -y update
Loaded plugins: fastestmirror, langpacks
Repository rdo-trunk-train-tested is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* base: mirror.kakao.com
* centos-ceph-nautilus: mirror.kakao.com
* centos-nfs-ganesha28: mirror.kakao.com
* centos-openstack-train: mirror.kakao.com
* centos-qemu-ev: mirror.kakao.com
* extras: mirror.kakao.com
* openstack-train: mirror.kakao.com
* rdo-qemu-ev: mirror.kakao.com
* updates: mirror.kakao.com
Resolving Dependencies
--> Running transaction check
---> Package GeoIP.x86_64 0:1.5.0-11.el7 will be updated
---> Package GeoIP.x86_64 0:1.5.0-14.el7 will be an update
--> Processing Dependency: geoipupdate for package: GeoIP-1.5.0-14.el7.x86_64
---> Package LibRaw.x86_64 0:0.14.8-5.el7.20120830git98d925 will be updated
---> Package LibRaw.x86_64 0:0.19.4-1.el7 will be an update
---> Package ModemManager.x86_64 0:1.6.10-1.el7 will be updated
---> Package ModemManager.x86_64 0:1.6.10-4.el7 will be an update
---> Package ModemManager-glib.x86_64 0:1.6.10-1.el7 will be updated
---> Package ModemManager-glib.x86_64 0:1.6.10-4.el7 will be an update
---> Package NetworkManager.x86_64 1:1.10.2-13.el7 will be updated
---> Package NetworkManager.x86_64 1:1.18.8-2.el7_9 will be an update
---> Package NetworkManager-adsl.x86_64 1:1.10.2-13.el7 will be updated
---> Package NetworkManager-adsl.x86_64 1:1.18.8-2.el7_9 will be an update
---> Package NetworkManager-glib.x86_64 1:1.10.2-13.el7 will be updated
---> Package NetworkManager-glib.x86_64 1:1.18.8-2.el7_9 will be an update
---> Package NetworkManager-libnm.x86_64 1:1.10.2-13.el7 will be updated
---> Package NetworkManager-libnm.x86_64 1:1.18.8-2.el7_9 will be an update
---> Package NetworkManager-ppp.x86_64 1:1.10.2-13.el7 will be updated
---> Package NetworkManager-ppp.x86_64 1:1.18.8-2.el7_9 will be an update
--> Running transaction check
...중략...
---> Package mokutil.x86_64 0:15-8.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=====================================================================================================================================================================================
Package Arch Version Repository Size
=====================================================================================================================================================================================
Installing:
freerdp-libs x86_64 2.1.1-2.el7 base 851 k
replacing freerdp-plugins.x86_64 1.0.2-15.el7
gnome-dictionary x86_64 3.26.1-2.el7 base 642 k
replacing gnome-dictionary-libs.x86_64 3.20.0-1.el7
gnome-shell x86_64 3.28.3-32.el7 updates 2.1 M
replacing caribou.x86_64 0.4.21-1.el7
replacing caribou-gtk2-module.x86_64 0.4.21-1.el7
replacing caribou-gtk3-module.x86_64 0.4.21-1.el7
replacing python2-caribou.noarch 0.4.21-1.el7
xorg-x11-xauth x86_64 1:1.0.9-1.el7 base 30 k
xorg-x11-xinit x86_64 1.3.4-2.el7 base 58 k
xorg-x11-xkb-utils x86_64 7.7-14.el7 base 103 k
...중략...
Transaction Summary
=====================================================================================================================================================================================
Install 36 Packages (+95 Dependent packages)
Upgrade 940 Packages
Total download size: 1.1 G
Downloading packages:
No Presto metadata available for centos-openstack-train
No Presto metadata available for openstack-train
No Presto metadata available for base
No Presto metadata available for updates
No Presto metadata available for centos-ceph-nautilus
(1/1071): GeoIP-1.5.0-14.el7.x86_64.rpm | 1.5 MB 00:00:00
(2/1071): LibRaw-0.19.4-1.el7.x86_64.rpm | 308 kB 00:00:00
(3/1071): ModemManager-1.6.10-4.el7.x86_64.rpm | 738 kB 00:00:00
(4/1071): ModemManager-glib-1.6.10-4.el7.x86_64.rpm | 232 kB 00:00:00
(5/1071): NetworkManager-adsl-1.18.8-2.el7_9.x86_64.rpm | 163 kB 00:00:00
(6/1071): NetworkManager-glib-1.18.8-2.el7_9.x86_64.rpm | 1.5 MB 00:00:00
(7/1071): NetworkManager-libnm-1.18.8-2.el7_9.x86_64.rpm | 1.7 MB 00:00:00
...중략...
(1068/1071): yum-utils-1.1.31-54.el7_8.noarch.rpm | 122 kB 00:00:00
(1069/1071): zlib-1.2.7-18.el7.x86_64.rpm | 90 kB 00:00:00
(1070/1071): zlib-devel-1.2.7-18.el7.x86_64.rpm | 50 kB 00:00:00
(1071/1071): zenity-3.28.1-1.el7.x86_64.rpm | 4.0 MB 00:00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 46 MB/s | 1.1 GB 00:00:25
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage
Importing GPG key 0xE451E5B5:
Userid : "CentOS Storage SIG (http://wiki.centos.org/SpecialInterestGroup/Storage) <security@centos.org>"
Fingerprint: 7412 9c0b 173b 071a 3775 951a d4a2 e50b e451 e5b5
Package : centos-release-storage-common-2-2.el7.centos.noarch (@extras)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage
...중략...
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Updating : libgcc-4.8.5-44.el7.x86_64 1/2055
Installing : urw-base35-fonts-common-20170801-10.el7.noarch 2/2055
Installing : xorg-x11-proto-devel-2018.4-1.el7.noarch 3/2055
...중략...
Verifying : 10:qemu-kvm-1.5.3-156.el7.x86_64 2053/2055
Verifying : python-dmidecode-3.12.2-2.el7.x86_64 2054/2055
Verifying : freerdp-1.0.2-15.el7.x86_64 2055/2055
Installed:
freerdp-libs.x86_64 0:2.1.1-2.el7 gnome-dictionary.x86_64 0:3.26.1-2.el7 gnome-shell.x86_64 0:3.28.3-32.el7
grub2.x86_64 1:2.02-0.86.el7.centos grub2-tools.x86_64 1:2.02-0.86.el7.centos grub2-tools-extra.x86_64 1:2.02-0.86.el7.centos
...중략...
qemu-img.x86_64 10:1.5.3-156.el7 qemu-kvm.x86_64 10:1.5.3-156.el7 qemu-kvm-common.x86_64 10:1.5.3-156.el7
sip-macros.x86_64 0:4.14.6-4.el7 urw-fonts.noarch 0:2.4-16.el7 webkitgtk4-plugin-process-gtk2.x86_64 0:2.16.6-6.el7
Complete!
[HOSTNAME:/home/haedong:]$ sudo yum install -y openstack-packstack
Loaded plugins: fastestmirror, langpacks
Repository rdo-trunk-train-tested is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* base: mirror.kakao.com
Resolving Dependencies
--> Running transaction check
---> Package openstack-packstack.noarch 1:15.0.1-1.el7 will be installed
--> Processing Dependency: openstack-packstack-puppet = 1:15.0.1-1.el7 for package: 1:openstack-packstack-15.0.1-1.el7.noarch
--> Processing Dependency: python-docutils for package: 1:openstack-packstack-15.0.1-1.el7.noarch
--> Processing Dependency: python2-pbr for package: 1:openstack-packstack-15.0.1-1.el7.noarch
--> Running transaction check
---> Package openstack-packstack-puppet.noarch 1:15.0.1-1.el7 will be installed
--> Processing Dependency: puppet-aodh for package: 1:openstack-packstack-puppet-15.0.1-1.el7.noarch
--> Processing Dependency: puppet-apache for package: 1:openstack-packstack-puppet-15.0.1-1.el7.noarch
...중략...
Verifying : 1:openstack-packstack-15.0.1-1.el7.noarch 76/78
Verifying : python2-pbr-5.1.2-2.el7.noarch 77/78
Verifying : puppet-cinder-15.4.0-1.el7.noarch 78/78
Installed:
openstack-packstack.noarch 1:15.0.1-1.el7
Dependency Installed:
boost159-atomic.x86_64 0:1.59.0-2.el7.1 boost159-chrono.x86_64 0:1.59.0-2.el7.1 boost159-date-time.x86_64 0:1.59.0-2.el7.1
...중략...
ruby-facter.x86_64 1:3.9.3-7.el7 ruby-shadow.x86_64 0:1.4.1-23.el7 rubygem-pathspec.noarch 0:0.2.1-3.el7
rubygem-rgen.noarch 0:0.6.6-2.el7 yaml-cpp.x86_64 0:0.5.1-6.el7
Complete!
시큐어 셸(Secure SHell, SSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 기존의 rsh, rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다.
SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다고 하더라도 이해할 수 없는 암호화된 문자로 보인다.
SSL 그리고 HTTPS 의 암호화 통신방식을 이용한 쉘이다. 비대칭키 암호화 알고리즘으로 대칭키를 암호화 하여 주고받은 뒤 대칭키로 암호화 된 메시지를 주고 받는 프로토골이다.
대부분의 리눅스 시스템에 기본으로 포함되어있고, 설치된다. ssh 서버에 접속하기 위한 클라이언트는 대부분의 linux 배포본에는 기본적으로 포함되어있고, Windows Powershell에도 포함되어있다.
사용법
linux shell / powershell 모두 ssh 계정명@hostname_또는_IP 명령으로 다른 호스트에 연결할 수 있다. 대개의 경우 Windows 에서는 putty 라는 공개 툴을 많이 사용한다.
# 일반적인 연결방법
# ssh account@server_HOSTNAME_or_server_IP
[haedong@openstack2:~]$ssh haedong@192.168.113.172
haedong@192.168.113.172's password:
Last login: Thu Dec 17 13:26:54 2020 from 192.168.4.199
[haedong@openstack2:~]$
# 저장된 ssh key를 사용하는 경우
# ssh account@server_HOSTNAME_or_server_IP -i KEY_FILE_NAME
[haedong@openstack2:~]$ssh root@192.168.113.171 -i ~/.ssh/id_rsa
Last login: Wed Dec 16 09:31:02 2020 from openstack3
[root@openstack1:~]#
# 접속 로그 확인을 원할 경우
[haedong@openstack2:~]$ssh root@192.168.113.171 -i ~/.ssh/id_rsa -v
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug1: Connecting to 192.168.113.171 [192.168.113.171] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/haedong/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/haedong/.ssh/id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.4
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4
debug1: match: OpenSSH_7.4 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 192.168.113.171:22 as 'root'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit > compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit > compression: none
debug1: kex: curve25519-sha256 need=64 dh_need=64
debug1: kex: curve25519-sha256 need=64 dh_need=64
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:mLoKmt/MNoY/Il1LahMDflXKfT/c KSpI80vbl2m5EFM
debug1: Host '192.168.113.171' is known and matches the ECDSA host key.
debug1: Found key in /etc/ssh/ssh_known_hosts:4
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-256,rsa-sha2-512>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mi c,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
No Kerberos credentials available (default cache: KEYRING:persistent:1000)
debug1: Unspecified GSS failure. Minor code may provide more information
No Kerberos credentials available (default cache: KEYRING:persistent:1000)
debug1: Next authentication method: publickey
debug1: Trying private key: /home/haedong/.ssh/id_rsa
debug1: Authentication succeeded (publickey).
Authenticated to 192.168.113.171 ([192.168.113.171]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = ko_KR.UTF-8
Last login: Thu Dec 17 13:38:57 2020 from openstack2
[root@openstack1:~]#
sshd (SSH daemon : a.k.a ssh server) 설정
기본적으로 ssh 데몬의 설정파일은 /etc/ssh/sshd_config ssh 클라이언트 설정 파일은 /etc/ssh/ssh_config 파일이다. 보통은 windows클라이언트에서 linux 서버로 접속을 하는 경우가 많다보니 ssh_config 파일을 수정하는경우는 많지 않(은것 같)다.
자주 사용하거나, 중요한 옵션만 기억하자.
# ssh 서버 설정을 위한 값. 주석처리가 되어있는 경우 기본값으로 설정된다.
#Port 22
#ListenAddress 0.0.0.0
# root로 로그인을 허용할 것인지 설정. no로 설정하고 sudo을 이용하는 것을 권장한다.
#PermitRootLogin yes
PermitRootLogin no
# 로그인을 시도하는 계정/.ssh/authorized_keys 파일을 의미한다.
# 허용할 공개키를 저장하는 파일을 가리킨다.
AuthorizedKeysFile .ssh/authorized_keys
# 빈 패스워드 로그인을 허용할 것인지 설정한다. 당연히 no로 설정하는 것이 '옳다'
PermitEmptyPasswords no
# password를 이용한 로그인을 허용할 것인지 설정한다.
PasswordAuthentication yes
# GSSAPI 사용 여부
# 간혹 폐쇄망에서 접속 지연(ID 입력 후 지연)이 발생하년 경우 no로 변경
# GSSAPI options
GSSAPIAuthentication no
GSSAPICleanupCredentials no
# 역시 폐쇄망 혹은 DNS 연결이 안되는 환경에서 접속 지연이 발생화면 no로 변경
UseDNS no
서비스 구동 / 재시작 / 종료
# 서비스 구동
# service sshd start
[haedong@openstack2:~]$ sudo systemctl start sshd.service
# 서비스 재시작
# service sshd restart
[haedong@openstack2:~]$ sudo systemctl restart sshd.service
# 서비스 구동
# service sshd stop
[haedong@openstack2:~]$ sudo systemctl stop sshd.service
사실 service sshd stop 또는 systemctl stop sshd.service 명령은 평생 내릴 일 없는 명령일지도 모른다.
ssh 키 쌍을 이용한 로그인 설정
SSL 그리고 HTTPS 포스트에서 설명한 공개키를 미리 서버에 저장해 두고 인증하는 방식이다. 이해를 위해 개념적인 절차를 기재해보면(실제 절차와는 차이가 있음) 1. 사용자가 비대칭 키 쌍 K1(공개키), K2(비밀키)를 생성. 2. 서버에 K1 을 저장 3. 사용자가 서버에 접속 시도 4. 서버는 대칭키 KS 생성 5. K1로 KS를 암호화하여 KK 생성 6. KK를 사용자에게 전달 7. 사용자는 KK를 K2를 복호화하여 KS 획득 8. KS를 KS로 암호화하여 SS 생성 9. 서버로 SS 전송 10. 서버는 KS로 SS를 복호화 하여 KS 획득. 11. 서버가 가지고 있는 KS와 사용자가 전송한 KS가 같은지 비교 가 되겠다.
보통은 보안상의 이유로 ssh key를 이용한 로그인을 강제하지만 반대로 편리한 것도 있다. 모든 서버의 키를 하나로 통일하고 passphrase를 비워두면 패스워드 입력 없이 모든 서버에 접속이 가능해 진다.(당연히 보안상 지양해야 하는 행위다)
서버에서 키를 생성하고 등록하는 과정은 다음과 같다.
# 키를 등록할 서버에 로그인
[haedong@openstack3:~]$ssh-keygen
Generating public/private rsa key pair.
# 키쌍이 저장될 경로 기본값은 /home/계정명/.ssh/
Enter file in which to save the key (/home/haedong/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 비워두거나 최소5자 이상의 암호구
Enter same passphrase again: 비워두거나 최소5자 이상의 암호구
Your identification has been saved in /home/haedong/.ssh/id_rsa.
Your public key has been saved in /home/haedong/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+rZt72JUHSrIuqEeI07ey/5MQm1pYmFxFmBukuegj8s haedong@openstack3
The key's randomart image is:
+---[RSA 2048]----+
| +.+. |
| + + . |
| + * . . o . |
| . B o .o . o . |
|. = =.S o |
| o o +o. . |
|. + +.oo . |
|.= +.*....+ |
|.Eoo*oo.o+.+o |
+----[SHA256]-----+
[haedong@openstack3:~/.ssh]$ls -lah /home/haedong/.ssh/
합계 12K
drwx------. 2 haedong haedong 57 12월 17 14:33 .
drwx------. 3 haedong haedong 95 12월 16 09:30 ..
-rw-------. 1 haedong haedong 1.8K 12월 17 14:33 id_rsa
-rw-r--r--. 1 haedong haedong 400 12월 17 14:33 id_rsa.pub
-rw-r--r--. 1 haedong haedong 188 12월 16 09:30 known_hosts
[haedong@openstack3:~/.ssh]$ls -lah /home/haedong/
합계 16K
drwx------. 3 haedong haedong 95 12월 16 09:30 .
drwxr-xr-x. 3 root root 21 12월 14 14:27 ..
-rw-------. 1 haedong haedong 31 12월 16 10:36 .bash_history
-rw-r--r--. 1 haedong haedong 18 4월 1 2020 .bash_logout
-rw-r--r--. 1 haedong haedong 193 4월 1 2020 .bash_profile
-rw-r--r--. 1 haedong haedong 231 4월 1 2020 .bashrc
drwx------. 2 haedong haedong 57 12월 17 14:33 .ssh
# 파일 권한ㅇ르 주목하자.
# 공개키 등록
# 다른 곳에서 만든 키를 넣어도 된다.
# sshd_config 파일에 설정한 파일명과 일치해야 한다.
[haedong@openstack3:~/.ssh] cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
# 또는
[haedong@openstack3:~/.ssh] cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# >를 하나만 넣게 되면 authorized_key 파일의 내용을 모두 지운다음 id_rsa.pub의 내용이 들어가게 된다.
# >>는 읽으려는 파일의 내용을 대상 파일의 맨 끝에 붙여넣는다.
# .ssh 디렉토리는 700
# .ssh 디렉토리 아래 파일들은 600 권한이어야 한다.
# 당연한 이야기지만 소유자는 해당 키를 사용할 계정이어야 한다.
[haedong@openstack3:~/.ssh]$chmod 600 ~/.ssh/*
[haedong@openstack3:~/.ssh]$ll ~/.ssh/
합계 16
-rw-------. 1 haedong haedong 400 12월 17 14:41 authorized_keys
-rw-------. 1 haedong haedong 1766 12월 17 14:33 id_rsa
-rw-------. 1 haedong haedong 400 12월 17 14:33 id_rsa.pub
-rw-------. 1 haedong haedong 188 12월 16 09:30 known_hosts
id_rsa 파일을 클라이언트에 저장한다. 다운로드 해도 되고, 내용을 복사한뒤 일반 텍스트 파일 형식으로 저장해도 된다. 앞서 설명한 것처럼 ” ssh account@hostname -i id_rsa ” 와 같이 키 파일을 지정해주면 된다.
댓글을 달려면 로그인해야 합니다.