골방잡담

리눅스 복습 (feat. 생활코딩) - 2 본문

PC방에서/리눅스

리눅스 복습 (feat. 생활코딩) - 2

sisu_ 2020. 7. 26. 01:38

network

  • curl google.com : google.com의 html 파일을 가져옴

  • 자신의 서버 IP 알아내기

    • curl ipinfo.io/ip → public address

    • ip addr → private address
  • public/private은 어떻게 다를까?
    • public address는, 온라인 서비스 입장에서 접속한 컴퓨터가 어떤 IP로 접속했는지 확인. router(공유기)을 통해서 외부에서 붙은 주소를 봄
    • ip addr은 컴퓨터에 실질적으로 어떤 IP가 붙어있는지 확인하기 때문에 private ip가 나옴
    • 어떤 회사에 전화했을 때, 대표번호가 있는 것과 내선번호가 있는 비유를 생각해보면 편하다.
      라우터 안에 묶여있는 컴퓨터 끼리는 서로 접속이 가능. (마치 사내에서 내선번호로 서로 왔다 갔다 할 수 있듯) 즉, 같은 망 안에서는 서로 접속해서 확인 가능

 

apache

  • 로컬에서 우리가 인터넷을 사용하기 위해 firefox, ie, chrome과 같은 webbrowser를 설치하듯이 web server에 속하는 소프트웨어도 설치해서 이용해야 함 → 예시 ) apache, nginx, IIS

  • sudo를 이용해서 뭔가 설치하려고 하기 전, sudo apt-get update을 항상 해주면 좋음

  • ubuntu@ip-172-31-43-2:~$ sudo service apache2 start : 켜짐

  • ubuntu@ip-172-31-43-2:~$ sudo service apache2 stop : 꺼짐

  • ubuntu@ip-172-31-43-2:~$ sudo service apache2 restart

  • apache2 실행 시, htop으로 보면, apache2가 여러 개 뜸.
    apache의 경우 web server이기 때문에 많은 접속에 대비하기 위해 많은 프로세스가 뜸

  • 웹서버에 접속해야 잘 설치됐는지 확인이 가능한데, 특정 IP를 가지고 접근해서 web server에 접속하는 건 현실적인 이유로 난관이 많을 수 있기 때문에, 가장 간단한 건 shell에서 직접 웹서버에 접속하는 것. shell에서 웹 브라우징을 할 수 있는 프로그램이 elinks라는 것.

  • elinks http://{서버IP} 해서, 아래와 같이 화면이 뜨면 성공한 것!

  • 그럼 apache라는 web server을 설치했고, elinks라는 브라우저를 이용해서 request를 한 것이고, 이때 IP를 이용해서 접속한 것.

  • 참고로 이렇게 한 서버에서 web browser, server 다 있으면 그냥 localhost or 127.0.0.1 써도 됨.

    elinks 127.0.0.1, elinks localhost로 해도 동일.

 

그렇다면, apache를 띄우면 index.html은 어디서 가져오는 걸까?

  • /etc/apache2/apache2.conf 에 들어가면, apache 관련 세팅들을 볼 수 있음. 이 중 아래 설정을 보고, 경로를 따라가 보자

  • sites-enabled라는 디렉터리에 있는 conf 파일을 모두 읽는다는 뜻

  • 그러면, 저 디렉터리를 찾아서 들어가 보자.

  • conf파일을 까 보면, 저 경로로 들어가 보면, documentroot라고 해서 어떤 파일을 참조하고 있는지 나옴 (=최상위 페이지라는 뜻!)

  • /var/www/html에 들어가면, index.html이 있음🙂

 

결론적으로,  사용자가 web browser에서 접속했을 때 webserver은 /etc/apache2라는 경로의 설정 파일을 참고해서, 서버 storage의 어느 경로를 참고해서(/var/www/html) 어느 파일 읽어서 web browser에게 보내주는 거라고 생각하면 됨.

 

* 즉, 운영할 때는 설정이 매우 중요!!! * 

 

/var/www/html은 설정을 바꾸면 언제든 다른 위치로 바꿀 수 있음.

 

 

*요약 *

  • web browser를 띄울 때, /etc/apache2 밑에 있는 설정 파일을 보고, 그 설정 파일이 알려주는 rootdocument 위치에 있는 index.html을 참조함.

  • /etc/apache2/sites-enabled/000-default.conf 에 있었음

 

Apache 로그

  • 같은 경로에, 로그에 대한 내용도 있음.

  • 아래에서 ${APACHE_LOG_DIR}/error.log 경로는, /var/log/apache2 임. 이 밑에 access.log, error.log 가 있음.

  • access.log 파일을 tail -f 하면서, localhost로 curl 하거나, elinks를 사용하면 접근 이력이 아래와 같이 찍힘

 

SSH

  • 리눅스는 서버 시장에서 대부분을 차지하고 있고, 특히 사물인터넷에서 많이 이용되고 있음

  • 이런 서버를 원격으로 제어하고 싶으면, client / server 양 쪽에 프로그램을 설치해야 함

    • client : SSH client 설치 ------> server : SSH server 설치

    • SSH client라는 프로그램에 명령어를 입력해서, (rm, ls, pwd) SSH server가 설치된 컴퓨터를 제어하는 것. SSH server가 server computer를 제어하고, client 에다가 결과를 보여줌

  • 이런 서버-클라이언트 관계가 webserver와 web browser 관계와 거의 비슷하다고 생각하면 됨.

  • 대부분의 서버들은 ssh가 이미 설치돼있음.

SSH 설치해보기

  • sudo apt-get purge openssh-server openssh-client 하면 삭제가 됨

  • sudo apt-get install openssh-server openssh-client

    : 여기서 openssh-server는 구체적인 이름의 ssh-server임. (마치 apache - web server 같은 )

  • sudo service ssh start

  • sudo ps aux | grep ssh 했을 때, sshd라는 이름들이  나오면 잘 된 것.

 

SSH 이용해서 원격 접속하기 

  • ssh client를 설치한  B 서버에서, ssh server 설치한 A 서버에 접속할 수 있음.

    ssh {host ip} 식으로

  • (회사에서 ssh로 다른 서버 가는 게 다 이렇게 하는 거였음!!!!)

 

Port

  • ssh -p 22 {ip} 이런 식으로 포트를 추가해서 접속할 수도 있음

  • 서버에는 6만 5천여 개의 port가 있음. 0~65000

  • ssh 서버는 22번 포트를 'listen' 하다가 22번 을 호출하면 옴

  • 0~1024는 well-known server 용

  • 1024~65000 은 아무거나 쓰면 됨

  • /etc/ssh/sshd_config에 포트 번호가 정의되어 있음.  여기서 바꿔주고 ssh restart 하면, 다시 서버에 접속할 때에는 해당 포트로 들어가야 함

포트를 2222번으로 임의로 바꿔보았다
ssh restart를 해야 반영이 됨
이제는 22번 포트로 로그인이 안 되고, 무조건 2222 포트로 설정해야 함

 

port forwarding

  • 이것도 업무에서 처음 정말 이해가 안 갔었는데... 몇 번 사용해보니 익숙해진 개념. 
  • 이렇게 체계적으로 그림을 그려서 설명해주시니 한방에 이해가 됐다 ㅎㅎㅎ

출처 : 생활코딩 인터넷강의 수업 (https://youtu.be/jLviT1-dfL4)

  • public IP:port로 들어왔을 때, 특정 포트로 들어오면 특정 사설 IP로 들어가게 세팅할 수 있음

  • 보통 공유기에는 기본적으로 web server를 띄우고 있음.

  • 공유기의 ip는 default gateway라고 함, ip route로 알아낼 수 있음.

  • 공유기 화면에서 port forwarding setting 가능

 

Domain , DNS(domain name system)

  • hosts 파일은 어떤 도메인이 어떤 IP다, 라는걸 갖고 있는 파일. 각 서버마다 hosts 파일이 있어서, dns에게 물어보는 게 아니라 hosts 파일에 적혀있는 domain name의 IP를 보고 접속.
    • hosts 파일 조작의 경우, 테스트를 할 때 정말 많이 사용했었다. (그냥 로컬 피씨에서..) 특정 도메인에 대해서, STG-PRD를 왔다 갔다 하고 싶을 때 hosts를 주석 처리해가면서 사용했었다. 
  • google.com으로 들어가면, 내 서버의 web server가 출력되게 하고 싶다면?

    • /etc/hosts 파일 바꾸기 : naver.com으로 가면, 127.0.0.1로 가게

...hosts 파일의 중요성이 새삼 느껴짐

  • hosts 파일을 1순위로 보고, 그다음에 dns 서버를 봄.

    • /etc/resolv.conf를 까 보면 뜨는 nameserver는, 통신사의 것
  • host {도메인 주소} 치면 IP 확인 가능

 

서브도메인

  • 도메인 앞에 prefix (admin.egoing.ga처럼)를 붙여서 운영하는 방법

 

DNS의 동작 원리

  • 사실 도메인에는 마지막에. 이 생략돼있어 : google.com.으로 해도 잘 감

  • 이. 을 'root'라고 표현해

  • root dns server는 성능/안정성을 위해 전 세계에 골고루 퍼져있음.

  • egoing.ga를 요청하면, dns server가. ga를 담당하는 서버를 root dns server가 돌려줌.

  • 그럼 우리 dns server는, ga의 dna server에게 egoing.ga의 IP를 물어봄.

  • linux에 직접 dns 서버를 구축할 수도 있지만, 요즘은 점점 그런 게 없어지고 있음.

 

인터넷을 통한 서버 간 동기화

  • 인터넷을 통해서 컴퓨터와 컴퓨터의 파일을 동기화하는 방법인 rsync

  • 참고로 여기서 rsync -a src/ dest에서 src 뒤에 /를 빼면, src 폴더가 통째로 dest 밑으로 복사됨. /를 하면 그 하위에 있는 것들만 들어감.

  • 증분에 대해서만 싱크를 시킬 수도 있어. rsync -av src/ dest  하면, dest에 없는 애들만 복사됨

  • -a : archive mode, 디렉터리 전체를 다 복사하고, 파일의 속성/ 권한도 같이 전송, 한다는 의미

 

ssh key로 로그인하기

  • 다른 서버 로그인할 때 비번 안 치고 들어갈 수 있게 설정할 수 있음!

  • 장점은, 크론 이용해서 자동화할 때 자동 로그인을 해야만 할 수 있음.

Comments