SSH Tunnel을 통한 mysql server에 접속하기


참고1: https://www.rosehosting.com/blog/access-your-database-remotely-through-an-ssh-tunnel/

참고2: https://bit.ly/3JUY46T

이것은 FTP Server에 접속할 때 SFTP로 접속하는 것과 동일하다. 즉, 원래 21번 포트로 접속하지 않고 22번 포트로 접속하여 FTP의 취약한 보안성을 해결할 있다.

그렇듯이 mysql DB server에 접속할 때도 3306 포트로 접속하지 않고 SSH Tunnel을 만들어서 접속하면 22번 포트로 접속하여 훨씬 보안성을 높일 수 있다

FTP Server나 mysql Server가 Linux에서 실행중이면 이 방법을 사용하여 접속하는 것이 유리하다

==============

-mysql Server가 설치된 ansible(172.30.1.60)-
yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
rpm –import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum install mysql-community-server
systemctl start mysqld –now

netstat -nltup
netstat -an | grep ESTABLISHED

yum install mysql -y (##mysql client 설치)

cat /var/log/mysqld.log | grep ‘temporary password’ (##임시 암호를 복사한다)
mysql -u root -p
복사한 암호를 붙여 넣는다

root 계정에 대한 암호를 변경한다
alter user ‘root’@’localhost’ identified by ‘P@ssw0rd’;
commit;

mysql -u root -p (##바뀐 암호로 로그인 하여 본다)
exit

mysql Client(node1)가 접속한 후 다시 아래 명령어를 입력한다
netstat -an | grep ESTABLISHED

===============================

-mysql Client가 설치된 node1(172.30.1.22)-

yum install mysql -y
netstat -an | grep ESTABLISHED
ssh -fNg -L 3306:127.0.0.1:3306 root@172.30.1.60

포트 포워딩: -L local_port:localhost:remote_port

man ssh | grep \-f

man ssh | grep \-N

man ssh | grep \-g

netstat -an | grep ESTABLISHED ##22번 포트로 하나 더 연결되었다는 것을 확인
mysql -h 127.0.0.1 -P 3306 -u root -p ##원격(172.30.1.60) 서버에서 실행 중인 mysql server에 접속함
show databases;

다른 세션으로 node1에 접속하여 아래 작업을 하여 어떻게 세션이 연결되었는지 확인한다
netstat -an | grep ESTABLISHED

Windows 컴퓨터에서 Azure Kubernetes Service(AKS)에 접속하여 Container 실행하기


AKS를 이용하면 Load Balancer에서 공인 IP를 쉽게 받을 수 있다
Windows 10/11에 wsl2를 설치한 후 docker desktop을 설치해 두어야 한다.
이렇게 하면 kubectl 클라이언트 프로그램을 사용할 수 있다

az login
cd c:\terraform\lab\aks

-Terraform으로 AKS 설치하기-
terraform init
terraform plan
terraform apply –auto-approve

-kubectl을 실행하기 위해 config 파일 복사하기-
az group list -o table
az aks list -g aks_tf_rg -o table
az aks get-credentials -n devops-coach-aks -g aks_tf_rg
kubectl get nodes -o wide

-Linux Image-
kubectl create deployment mynginx –image nginx –port 80
kubectl expose deployment mynginx –port 80 –type LoadBalancer

kubectl create deployment mymario –image pengbai/docker-supermario –port 8080
kubectl expose deployment mymario –port 8080 –type LoadBalancer

kubectl create deployment myaspnetapp –image mcr.microsoft.com/dotnet/samples:aspnetapp –port 80
kubectl expose deployment myaspnetapp –port 80 –type LoadBalancer

kubectl get service -o wide
공인 IP Address를 가진 두 웹싸이트에 Chrome으로 접속하여 내용 확인하기

terraform destroy –auto-approve

Windows 컴퓨터에서 Azure Container Instance에 접속하여 Container 실행하기


Azure를 이용하면 Container에 공인 IP를 받을 수 있다

az login

-Linux Image-
az container create -n mynginx -g testRG –image library/nginx –ip-address public –ports 80
az container create -n mymario -g testRG –image pengbai/docker-supermario –ip-address public –ports 8080
az container list -o table
az container exec -n mymario -g testRG –exec-command “/bin/bash”
az container create -n myaspnetapp -g testRG –image mcr.microsoft.com/dotnet/samples:aspnetapp –ip-address public
공인 IP Address를 가진 두 웹싸이트에 Chrome으로 접속하여 내용 확인하기

az group delete -n testRG

엔지니어가 알아야 할 기본 내용


  1. 인증
  • password
  • key(Cloud VM에서는 Key 인증 방식을 기본적으로 취하는데 Private Key를 다운로드하여 접속하게 한다)
    ssh -i linuxvm_key.pem azureuser@20.20.20.20
  • Private key와 Public key를 만들어서 Public Key를 복사하는 방법
    ssh-keygen
    ssh-copy-id root@vm1 (또는 ssh-copy-id -i ~/.ssh/id_rsa.pub root@vm2)
    반드시 암호대신 Private key 파일 이름을 지정해야 한다.
  1. sftp
  • 21번 포트가 아닌 22번 포트
  • vsftpd 서비스 제공 여부 확인하기: netstat -nltu
  • vsftpd에 접속한(연결함) 컴퓨터 확인하기: netstat -an | grep ESTABLISHED
  1. ansible
  • 여러 linux 컴퓨터들을 동시에 관리하는 방식
  • 이 때 ssh로 접속하여 관리
  1. mysql
  2. scp, ssh vm1 “ls -l ~root”


텍스트 웹 브라우저

  1. 원격 서버에 웹서비스가 실행중인지 확인하기
    curl https://google.com
    curl ifconfig.me (##내 컴퓨터의 공인 IP(공유기, 프록시 서버 IP) 확인)
  2. 원격 웹서버의 상세 정보 확인하기
    curl -v https://google.com
    curl -v https://google.com | grep Server
    curl -v https://www.webtime.co.kr | grep Server (Microsoft-IIS/10.0 웹서버)

웹서버 종류(nginx, apache, IIS 등등)와 인증서 정보(유효 기간)도 보인다

  1. 원격 컴퓨터의 index.html 파일 다운로드하기
    curl -o index.html http://www.nginx.com
  2. 원격 웹서버에 저장된 script 파일 실행하기
    curl -sSL http://down.cloudshell.kr/down/k8slab.sh | sh
    curl -sSL http://get.docker.com | sh

ansible을 이용하여 수십 대의 컴퓨터에 docker 설치하기

ansible servers -m shell -a ‘curl -sSL http://get.docker.com | sh’
ansible servers -m shell -a ‘systemctl enable docker –now’
ansible servers -m shell -a ‘docker version’
ansible servers -m shell -a ‘docker run –name myweb -d -p 8080:80 httpd’
curl vm1:8080


yum install net-tools -y

  1. 로컬 컴퓨터(내가 사용중인 컴퓨터)가 서비스 하고 있는 것 확인
    netstat -nltu (##LISTEN만 확인)
  2. 원격에서 내 컴퓨터에 접속한 컴퓨터 확인
    netstat -an | grep ESTABLISHED


yum install telnet -y

  1. 원격 컴퓨터에서 실행 중인 서비스 확인하기
    telnet 8.8.8.8 53
    telnet https://www.webtime.co.kr 443
    telnet vm1 22


yum install bind-utils -y

  1. 원격 컴퓨터 IP address 확인하기
    nslookup http://www.webtime.co.kr
    nslookup datasolution.kr
  2. local computer의 IP address 확인하기
    hostname -I
    ip addr show
    ifconfig


yum install nc -y
apt install netcat -y

  1. 원격 서버에 특정한 서비스가 실행중인지 확인하기
    nc -zv vm1 80
    nc -zv vm1 22
    nc -zv http://www.webtime.co.kr 443
    nc -zv onlinevision.center 80
    nc -zv down.cloudshell.kr 80
    nc -zv down.cloudshell.kr 443
  2. 우리 회사에서 3306(mysql) 포트를 우리 회사 방화벽에서 막고 있는지를 확인하기
    내 컴퓨터에 인위적으로 3306 포트를 Listen하도록 설정하여 원격 컴퓨터에서 접속이 되는지 확인한다
    nc -l -p 3306
    (##-l: listen, -p: port)

다른 컴퓨터에서 이 컴퓨터에 다른 세션으로 접속하여 3306 포트가 열려있는지(LISTEN) 확인해 보다
netstat -nltu
netstat -nltup (p:pid/program name으로서 어떤 프로그램으로 포트가 열렸는지도 확인 가능)

  1. 원격 컴퓨터에서 telnet으로 3306 포트가 열려 있는지 확인한다
    telnet 192.168.1.42 3306
    메시지가 connected to 192.168.1.42가 나오면 mysql 포트 번호로 접속이 되는 것을 알 수 있다
    그런데 다른 네트워크에서 3306으로 접속을 시도할 때 연결이 되지 않으면 회사 방화벽에서 차단하고 있다는 것을 알 수 있다
  2. 원격 컴퓨터에서 파일을 다운로드하기
    로컬 컴퓨터에서 사용되지 않는 포트(9025)를 사용하여 포트를 열어서 파일을 대기시킨다
    로컬 컴퓨터(192.168.1.42)에서 작업하기
    nc -l -p 9025 > big.file

원격 컴퓨터(192.168.1.2)에서 다운로드하기
nc 192.168.1.42 9025 > big.file

이런 작업을 할 때 로컬 컴퓨터나 회사 네트워크에서 방화벽을 사용하고 있다면 파일을 다운로드할 수 없다.

왜냐하면 방화벽은 기본적으로 모든 포트를 차단하고 있기 때문이다

  1. 포트를 열고 서로 메시지 전송하기
    로컬 컴퓨터(192.168.1.42)에서 작업
    nc -l -p 9025

원격 컴퓨터(192.168.1.3)에서 작업
nc 192.168.1.42 9025
이제부터 메시지를 입력한다
hi
nice to meet you

그 결과 로컬 컴퓨터에서 메시지가 나타난다. 그래서 그 메시지를 읽고 응답한다
me too
how is it going?

  1. 포트를 udp로 열고자 하면
    nc -l -u 9191

다른 컴퓨터에서 여기에 다른 세션으로 접속하여 다음과 같이 하면 udp로 열린 것을 알 수 있다
netstat -nltup

  1. 원격 컴퓨터에서 열린 Port scan 하기
    for i in $(seq 1 65535); do nc -nvz -w 1 192.168.1.3 $i 2>&1; done | grep -i connected

참고: https://tar-cvzf-studybackup-tar-gz.tistory.com/65

Linux에 terraform 설치하기


참고: https://www.terraform.io/downloads


<Ubuntu>
sudo apt update
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add –
sudo apt-add-repository “deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main”
sudo apt update && sudo apt install terraform
terraform –version

<CentOS>
sudo yum install -y yum-utils
sudo yum-config-manager –add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum repolist
sudo yum -y install terraform
terraform –version

Windows 10에 Azure CLI 설치하고 VM 실행하기


  1. 다운로드하여 설치하기
    https://docs.microsoft.com/ko-kr/cli/azure/install-azure-cli-windows?tabs=azure-cli
  2. Azure Login
    az login
  3. 사용할 수 있는 구독 정보 보기
    az account list -o table
    az account list -o yaml
  4. 기본 구독 설정하기 (##옵션)
    az account set –subscription ‘my-subscription-name’
  5. 이용 가능한 Region 확인하기
    az account list-locations -o table
  6. 새롭게 Resource Group 생성하기
    az group list -o table
    az group create –location eastus –name testRG
  7. VNet 생성하기
    az network vnet list -o table
    az network vnet create -n testVNet -g testRG
  8. 사용가능한 VM 종류 확인하기
    az vm image list -o table
    az vm image list –offer CentOS –all -o table
    az vm image list –offer Ubuntu –all -o table
    az vm image list –offer Win2022Datacenter –all -o table
  9. 사용가능한 VM size 확인하기
    az vm list-sizes -l eastus -o table
  10. Linux VM 생성하기
    az vm list -o table
    az vm create -g testRG -n myubuntu –image UbuntuLTS -l eastus –vnet-name testVNet –admin-username adminuser –admin-password P@ssw0rd1234 –size Standard_DS2_v2 –no-wait
  11. 현재 실행중인 VM size 확인하기
    az vm show -g testRG -n myubuntu -o yaml
    az vm show -g testRG -n myubuntu –query hardwareProfile.vmSize

az vm create -g testRG -n mycentos –image CentOS -l eastus –vnet-name testVNet –admin-username adminuser –admin-password P@ssw0rd1234 –size Standard_DS2_v2 –no-wait

az vm create -g testRG -n mycentos2 –image CentOS -l eastus –generate-ssh-keys

  1. 실행중인 VM의 Public IP 확인하기
    az vm list-ip-addresses -g testRG -n myubuntu -o table
  2. VM에 접속하기
    ssh adminuser@20.127.7.236
  3. VM 멈추고 시작하기
    az vm list -o table
    az vm show -n myubuntu -g testRG -d

az vm stop -g testRG -n myubuntu
az vm start -g testRG -n myubuntu

  1. Resource Group 삭제하기
    az group delete -n testRG –no-wait

Windows 10에 Terraform 설치하기


참고 영상: https://youtu.be/-DXH5ou8PMQ

1) download
https://www.terraform.io/downloads

2) 폴더 생성
c:\terraform

3) 다운로드받은 파일을 c:\terraform에 풀기

4) 명령어를 실행하기 위해 환경변수 등록하기
시스템 – 고급 시스템 설정 – 환경변수 – 새로 만들기
사용자 및 시스템 환경 변수를 각각 동일하게 생성한다
PATH
C:\terraform

저장하고 빠져나온다

5) PowerShell을 실행한다
terraform –version
terraform –help

Windows Server 2022에 Container 서비스 설치하기


참고 영상: https://youtu.be/mDlxN9w4Iho
Get-WindowsFeature -Name containers
Install-WindowFeature -Name containers

Install-Module DockerMsftProvider -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
Restart-Computer
Get-Service -Name docker

docker version
docker info
docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker images
docker run -it -d -p 8000:80 –name winContainer mcr.microsoft.com/dotnet/samples:aspnetapp
docker ps

웹브라우저를 실행하여 http://localhost:8000
docker rm winContainer -f

docker pull pihole/pihole:latest (##실패: 이것은 Linux용 Image이기 때문)

** MCR: Microsoft Container Registry

** mcr.microsoft.com는 https://github.com/microsoft/containerregistry 이다

** <MCR Content>

The discovery experience for MCR is provided through dockerhub.

To query the list of repositories within mcr: https://mcr.microsoft.com/v2/_catalog (##중요: 확인해볼 것)

To query the list of tags, within a repository: https://mcr.microsoft.com/v2/{namespace/repo}/tags/list

For example, to retrieve the list of tags for mcr/hello-world : https://mcr.microsoft.com/v2/mcr/hello-world/tags/list

kubernetes master를 하나 더 추가하기


<kubernetes master 하나 더 추가하기>

참고 영상: https://youtu.be/c_AWJttifTc

참고 github: https://github.com/justmeandopensource/kubernetes/tree/master/kubeadm-ha-multi-master

##여기서는 첫번째 master에서 작업한다

kubeadm token list

kubeadm init phase upload-certs –upload-certs (certificate key를 복사할 것)

kubeadm token create –certificate-key “붙여넣기” –print-join-command

여기에 나온 결과를 복사한다

##여기서는 두 번째로 추가할 master에서 작업한다

화면에 나오는 내용을 사용하여 추가 master(master2)를 만든다(제일 뒤에 –apiserver-advertise-address 192.168.1.102 (두 번째로 추가한 master 주소) 붙여서 실행한다)

##여기서 제일 뒷 부분인 –control-plane –certificate-key를 포함하여 이하를 생략하면 추가 worker node를 생성하는 것이다

마지막으로 해야 할 것은 첫 번째에서 만든 구성 파일을 두 번째 master에 복사해주어야 한다

## 두 번째로 추가한 master에서 다음을 작업한다

mkdir ~/.kube

scp root@172.16.16.101:/etc/kubernetes/admin.conf ~/.kube/config