ip addr
입력, inent 뒤의 부분이 주소 -> 10.0.2.15curl ipinfo.io/ip
-> 211.36.24.37두 개의 결과가 다르다.
각각의 컴퓨터도 개별적인 주소를 갖는다. (ex. 10.0.3.1 / 10.0.3.2 / 10.0.3.3 / 10.0.3.4 등)
public ip와 private ip가 같으면 컴퓨터를 그대로 서버로 사용하면 된다. 하지만 다를 경우에도 할 수 있는 방법이 여러 가지가 있다. 예를 들어 라우터로 묶여있는 컴퓨터 간에는 접속할 수 있다.
이번 수업에서는 서버의 구체적인 사례로서 웹서버 그 중에서 아파치 웹서버를 설치하고 운영하는 방법에 대해서 알아본다.
sudo apt-get update
sudo apt-get install apache2
sudo service apache2 start
sudo service apache2 stop
sudo service apache2 restart
껐다 켜야할 때는 restartsudo htop
f4
로 apache
검색
apache는 많은 접속이 들어왔을 때 분산해서 처리하기 위해 여러 개의 아파치 웹서버가 자동으로 실행됨sudo apt-get install elinks
(elinks
URL 입력, google.com(마우스 혹은 tab 키
를 통해 이동, Q
로 빠져나감))
elinks http://내 컴퓨터의 ip 주소
(ip addr
로 알아낸 ip)elinks 127.0.0.1
ip 주소
elinks http://localhost
도메인 네임cd /etc
에 저장되어 있다.
cd apache2
ls -al
apache에 대한 설정파일 중 apache2.conf
라는 파일이 가장 중요/var/www/html
)를 document root라고 부른다.var/www/html
를 사용하는 이유는?
/etc/apache2/sites-enabled/000-default.conf
파일 안에 var/www/html
라고 적혀있었기 때문이다. 이 값을 바꾸면 다른 곳에 설치된다./etc/apache2/sites-enabled/000-default.conf
설정 파일에 보면
${APACHE_LOG_DIR}/error.log
${APACHE_LOG_DIR}/access.log
이런 내용이 있다.
아파치 웹서버가 동작할 때 잘 동작하는지 오류가 있는지 확인하고 싶을 때 아파치 로그 디렉토리로 지정되어 있는 특정한 디렉토리 아래에 있는 error.log, access.log에 기록하겠다라는 뜻이다.APACHE_LOG_DIR
은 어디인가? cd /var/log/apache2/
cat access.log
acess.log에는 누군가가 웹서버에 접속할 때마다 접속한 사람의 정보가 추가됨
tail -f var/log/apache2/access.log
여기서-f
는 실시간으로 끝에 추가되는 정보만을 출력하는 아주 중요한 옵션error.log
에서 확인원격으로 쉘을 제어할 수 있는 방법인 ssh에 대해서 알아본다.
sudo apt-get purge openssh-server openssh-clinent
remove대신 purge를 하면 환경설정도 같이 사라지므로 삭제하는 것은 따라하지 말자.
sudo apt-get install openssh-server openssh-client
openssh는 ssh와 관련된 여러 프로그램을 제공하는 구체적인 프로그램
sudo service ssh start
실행 시작
sudo ps aux | grep ssh
잘 실행되는지 확인포트는 네트워크를 통해 적절한 애플리케이션을 실행 시키기 위해서 꼭 필요한 개념이다.
예시 1)
www.naver.com == www.naver.com:80 != www.naver.com:8888
여기서 80이라는 숫자가 포트이다.
예시 2)
ssh -p 22 egoing@192.168.0.65
p는 포트라는 의미, 접속이 된다. (exit
)
ssh -p 2222 egoing@192.168.0.65
Connection refused
-> ssh는 22번이라는 포트를 쓴다는 추론이 가능
0~1024번 포트는 well-known port 잘 알려진 포트라고 해서 값이 고정되어 접속할 때 포트의 값을 적지 않아도 연결된다. 그 이외의 포트는 프로그램을 만들어서 그냥 사용하면 된다.
sudo nano /etc/ssh/sshd_config
로 파일을 열어보면 Port 22
라고 적혀있다. 이것을 2222
로 변경할 수 있다. sudo service ssh restart
해야 반영된다.
클라이언트 컴퓨터에서 ssh -p 2222 egoing@192.168.0.65
라고 해야 접속된다.ISP(Internet Service Provider)는 인터넷 서비스 제공 회사
ip route
로 default gateway를 알아낼 수 있다. -> 192.169.0.1
(맥은 환경설정-네트워크에서 현재 연결된 와이파이-Advanced-TCP/IP-Router의 값)
192.168.0.65
내 컴퓨터의 ip주소 작성linuxlove
9000
사용자가 사용할 포트의 번호(라우터의 포트)80
위 설정을 정리하면, linuxlove
라는 규칙에 의해서 9000번 포트
로 누군가 들어왔을 때 192.168.0.65
ip 해당되는 컴퓨터의 80번 포트
로 신호를 보낸다는 뜻이다.
211.46.24.37:9000
(public ip:route port)로 접속을 시도할 수 있다.sudo nano /etc/hosts
로 nano에 들어간 다음
127.0.0.1 google.com
작성하면 elinks google.com
라고 했을 때
구글 홈페이지가 뜨는 게 아니라 내 웹서버(127.0.0.1)가 뜬다./etc/hosts
파일은 호스트들의 이름이 어떤 아이피를 갖는지 적어놓은 것이라고 할 수 있다.호스트들이 많아지고 hosts 파일로 관리하기가 어려워지면서 DNS 서버를 만들어 문제를 해결
/etc/hosts
파일을 어디에 활용할 수 있는가?
egoing.ga
라는 운영하고 있는 서버가 있고, 도메인에도 등록되어 있다고 가정하자. 근데 도메인과 관련된 결함이 있어 서버의 내용을 바꿨음. 서버 쪽에 수정한 내용을 바로 반영했다가는 실수가 있을 수 있음. 이럴 때 자신의 개발환경에서만 hosts 파일의 도메인을 자신의 컴퓨터로 수정한다.cat /etc/resolv.conf
라고 치면 어떤 IP가 나옴.(컴퓨터마다 다름)
어떤 통신사가 제공하는 케이블, 와이파이에 접속하는 순간 /etc/resolv.conf
의 내용이 그 회사에서 서비스로 제공하는 DNS 서버의 IP로 바뀐다.컴퓨터가 모르는 도메인으로 접속하려고 하면 먼저 이 IP로 접속한다.
curl ipinfo.io/ip
로 검색한 공용 아이피를 사용해야 한다.host egoing.ga
로 아이피 확인 가능하다.egoing.ga
, admin.egoing.ga
, blog.egoing.ga
, news.egoing.ga
dig +trace egoing.ga
로 egoing.ga(도메인 네임)이 DNS 서버를 통해 IP 주소 확인하는 경로를 알 수 있다.egoing.ga
뒤에는 .
이 숨겨져 있다.(egoing.ga.
) .
을 root라고 한다.dig +trace egoing.ga
치면 나오는 첫번째 문단)
egoing.ga
접속을 시도할 때, 클라이언트는 그 ip를 DNS 서버에 물어볼 것이다. ‘우리의 DNS 서버’는 ‘root DNS 서버’에게 .ga
를 담당하는 DNS 서버가 누구인지를 물어본다. 그러면 root DNS 서버는 .ga
라는 도메인을 담당하는 네임 서버들의 목록을 돌려준다.
(dig +trace egoing.ga
치면 나오는 두번째 문단)
egoing.ga
를 관리하는 DNS 서버를 또 물어본다.
(dig +trace egoing.ga
치면 나오는 세번째 문단)dig +trace egoing.ga
치면 나오는 네번째 문단)네트워크를 통해 파일을 copy하거나 back-up할 때 사용할 수 있는 유용한 기능
실습을 해보자. mkdir rsync
cd rsync/
mkdir src
mkdir dest
src
에 파일을 만들고 그 파일을
dest
에 동기화를 시켜보려고 한다.
cd src
touch test{1..10}
test1부터 test10까지 파일 생성cd ..
rsync -a src/ dest
(만약 rsync -a src dest
라고 하면 dest안에 src라는 디렉토리가 생성)ls -al dest
로 확인rsync
의 큰 매력은 증분 백업, 증분 카피를 한다.
cd dest
rm test10
cd ..
rsync -av src/ dest
test10만이 복사가 된다. (v가 들어가면 자세하게 내용을 출력한다.)cd ..
rsync -av src/ dest
다시 실행하면 아무것도 안 나온다. 원본과 사본이 같은 상태이므로 복사를 하지 않는 것이다.즉, 전송할 대상이 있을 때만 전송하기 때문에 굉장히 효율적으로 동작한다.
-a
란? archive mode로 동작한다는 의미. 즉, 특정 디렉토리 안에 디렉토리가 있으면 그 전체를 전송하는 모드로 동작하고, 변경사항들만 전송하는 모드로 동작하고, 그 파일의 속성까지도 같이 전송하는 강력한 기능rsync -azP ~/rsync/src/ k8805@192.168.0.65:~/rsync/dest
(rsync -azP [전송하는 디렉토리] [전송받은 user명@전송받는 ip]:[전송받는 디렉토리]
)
z는 압축한다는 의미, P는 전송상황을 프로그래스 바로 보여준다아이디, 패스워드 입력 없이도 자동으로 로그인되면서 훨씬 안전한 방법이 있다. ssh 공개키를 통한 로그인 방식이다.
192.168.0.65
/ 컴퓨터2의 ip: 192.168.0.67
>ssh-keygen
로 ssh 공개키, 비공개키를 만든다.
~/ .ssh
디렉토리 아래에 생성된 id_rsa
파일은 ssh private key id_rsa.pub
파일은 ssh public key라고 한다.ssh-copy-id egoing@192.168.0.67
로 컴퓨터1의 id_rsa.pub
의 내용을 컴퓨터2authorized_keys
파일의 맨 끝에 붙여넣는다.ssh egoing@192.168.0.67
치면 로그인 없이 컴퓨터2에 접속가능하다.ssh 공개키와 비공개키로 자동으로 로그인하게 하면 로그인 없이 동기화할 수 있다.
cron
(정기적으로 명령을 실행)과 같은 기능을 이용할 때 로그인을 해야 한다면 자동화를 시킬 수 없다.ssh egoing@192.168.0.67
)할 때 RSA라는 암호화 기법이 사용된다.암호화, 복호화를 할 때 똑같은 키를 쓰는 것을 대칭적 방식이라고 한다. 반대로, private key를 통해 암호화하고, public key를 통해 복호화하는 것을 비대칭적 방식이라고 한다. 비대칭적 방식의 대표 주자가 RSA다.
ssh
디렉토리에서 id_rsa
파일이 있으면 그것을 이용해서 random key를 암호화한다. 그리고 그 결과를 ssh server에게 전달한다.authorized_keys
에 저장되어 있는 공개키를 이용해서 복호화한다. 복호화한 결과가 random key가 같다면 로그인을 해준다.;
앞의 명령어가 실패해도 다음 명령어가 실행&&
앞의 명령어가 성공했을 때 다음 명령어가 실행&
앞의 명령어를 백그라운드로 돌리고 동시에 뒤의 명령어를 실행mkdir test;cd test
&&
를 사용하면
mkdir test(실패) && cd test && touch abc
cd test와 touch abc가 실행되지 않는다.;
를 사용하면
mkdir test(실패); cd test; touch abc
cd test가 실행되고, touch abc도 실행된다.echo $?
를 통해 이전 명령어가 반환한 값을 알아낸다.mkdir test
명령을 실행하고 echo $?
을 실행하면 0
을 출력한다.mkdir test
명령을 실행하고 echo $?
을 실행하면 1
을 출력한다.echo $?
을 실행하면 127
을 출력한다.&는 명령어를 백그라운드로 동작시킬 때 사용한다.
mkdir test3 && { cd test3; touch abc; echo 'success!!' } || echo 'There is no dir';
본 포스팅은 생활코딩 리눅스 강의(https://opentutorials.org/course/2598)를 참고하여 작성하였습니다.