728x90
반응형
728x90
반응형

31. 로그인 없이 로그인 하기(SSH Key)

31.1 Loginless : ssh public private key

SSH, rsync, git과 같은 기술을 사용할 때 로그인이 번거롭고 보다 안전한 방법으로 인증하고 싶다면 SSH공개키를 이용하면 됩니다. 

SSH공개키를 이용하면 편의성과 보안성 모두를 높일 수 있다고 하네요.

linux1컴퓨터

 · ssh-keygen -> enter -> y : id_rsa파일의 형태로 저장됩니다. 공개키와 비공개키를 만드는 것이죠.

 · cd ~ : 홈 디렉토리로 이동합니다

 · ls -al : .ssh디렉토리가 생성되어 있습니다.

 · cd ~/.ssh -> ls -al : authorized_keys파일 안에 id_rsa.pub키의 값을 파일 끝에 붙여주면 됩니다.

 · ssh-copy-id egoing@192.168.0.67 : 로그인하고자 하는 컴퓨터의 IP주소를 입력하여 linux1의 아이디를 복사를 하는 명령어입니다. 즉 linux1에 있던 is_rsa.pub에 값이 linux2 authorized_keys파일에 공개키가 저장됩니다.

linux1의 사용자를 linux2컴퓨터에 로그인하는 것을 허용한다는 의미로 해석됩니다.


linux2컴퓨터

 · cat authorized_keys : authorized_keys파일의 내용을 읽습니다.




31.2 Loginless2 : rsync

rsync는 컴퓨터와 컴퓨터 사이 동기화를 시키는 것인데요. 동기화를 위해서는 기본적으로 로그인 필요합니다.

linux1 컴퓨터

 · mkdir rsync3 -> cd rsync3 : rsync3디렉토리로 이동합니다.

 · touch test{1..100} : 100개의 비어 있는 파일이 생성됩니다.

 · rsync -avz .egoing@192.168.0.67:~/rsync_welcome : 현재 디렉토리에 있는 내용을 IP주소의 홈 디렉토리 밑 rsync_welcome의 디렉토리에 100개 파일을 동기화 시키는 명령어입니다.

linux2 컴퓨터

 · mkdir rsync_welcome: rsync_welcome디렉토리를 생성


rsync기능은 실행에 있어 편리합니다. cron은 정기적으로 명령을 실행시키는 것인데요.

rsync로 자동로그인하여 cron을 이용하여 정기적으로 백업을 자동화 처리할 수 있습니다.


31.3 Loginless3 : RSA

정보를 아무도 모르게 알아야 하는 사람만 알도록 이해할 수 없는 정보로 바꾸는 것을 암호화(encrypt)

암호화된 상태를 원래의 상태로 돌리는 것을 복호화(decrypt)라고 합니다.

Key를 이용해 암호화와 복호화를 하는데요. 키를 가진 사람만이 암호를 읽을 수 있겠죠.

암호화를 할 때와 복호화를 할 때 똑같은 키를 사용하는 것을 대칭적인 방식이라고 부릅니다.

예를 들면 정보를 암호화할 때 private키를 통해 암호화를 하는 것이죠.

private키를 public키로 돌릴 수 있는데 각각의 키가 달라지는 방식을 비대칭 방식이라고 합니다.

예를 들면 ssh키젠을 이용해 키를 만들 때 id_rsa(private키), id_rsa.pub(public키)가 짝을 이루어 다닙니다.

암호화할 때 private키를 썼다면 복호화 할 때 반드시 public키를 사용해야 합니다.

비대칭 방식의 대표 주자가 바로 RSA인데요

RSA방식은 SSH client가 SSH server에게 접속한다면 서버는 클라이언트에게 랜덤키를 줍니다. 랜덤키를 받은 클라이언트는 id_rsa파일이 있는 지 확인하고 서버가 전송한 랜덤키를 암호화(정보를 알아야하는 사람만 알도록 정보로 바꾸는 것) 시킵니다. 암호화된 결과를 다시 서버에게 전송합니다. SSH server는 암호화된 정보를 authorized_keys에 저장된 공개키를 이용해 다시 복호화(암호화된 상태를 원래의 상태로 돌리는 것)합니다. 복호화된 결과(클라이언트가 보내준 암호화된 키)가 SSH server가 랜덤키의 결과와 같다면 로그인을 허용하는 것입니다.

RSA방식은 아이디, 패스워드를 입력하는 것보다 복잡한 패스워드를 파일에 저장하여 파일을 갖고 로그인하는 것이 훨씬 안전하다고 하네요.



linux1컴퓨터

 · ls ~/.ssh/ : id_ras(private키), id_rsa(public키) 등의 파일 목록이 있습니다.

 · ssh egoing@192.168.0.67 : linux2 컴퓨터로 로그인합니다.

linux2컴퓨터

 · ls ~/.ssh : authorized_keys파일에 id_rsa_pub값을 가진다면 컴퓨터에 접속을 허용하겠다는 의미입니다.


32. 연속적으로 명령 실행시키기(;과 &와 &&의 차이)

CLI를 통해 컴퓨터를 제어하는 이유 중 하나는 해야 할 일을 순서대로 배치해서 자동화된 처리를 할 수 있다는 것입니다. 자동화된 처리를 위해서 명령어와 명령어 간의 연결하는 구분자를 잘 알아야 할 필요가 있습니다. 언어로 치면 접속사와 같은 의미를 갖습니다.

 · ; : 세미콜론 앞의 명령어가 실패해도 다음 명령어를 실행합니다.

 · mkdir test;cd test : test디렉토리를 생성 후 test디렉토리로 이동합니다.

 · && : 앞의 명령어가 성공했을 경우에만 다음 명령어가 실행됩니다. 세미콜론과는 다른 의미를 갖죠

 · mkdir test; cd test; touch abc : 세미콜론은 성공과 실패를 떠나 연속적으로 실행해야 할 명령을 사용할 때 씁니다. test디렉토리는 이미 존재하기에 실패를 하고 test디렉토리를 이동하여 abc파일을 생성합니다.  반면에

 · mkdir test && cd test && touch abc : test디렉토리가 이미 존재하기에 실패하여 cd test와 touch abc가 실행되지 않습니다. 대체로 &&를 쓰는 것이 좋다고 합니다.

&와 &&의 차이

&명령어는 백그라운드로 동작시킬 때 사용합니다.

 · mkdir test & cd test : test디렉토리를 백그라운드로 생성함과 동시에 test디렉토리로 이동하려 했기에 cd test는 존재하지 않는 디렉토리로 진입을 하려 하기에 no such file or directory메시지가 뜨고 test디렉토리는 생성됩니다.

& : 앞의 명령어를 백그라운드로 돌리고 동시에 뒤에 명령어를 실행합니다.

 · mkdir test3 && { cd test3; touch abc; echo 'success!'; } || echo 'there is no dir';

: mkdir test3가 성공했을 때 cd test2; touch abc를 실행하고 success!!를 출력합니다. 실패했을 경우 'There is no dir'이 출력되죠.




생활코딩 리눅스 강의



728x90
반응형
728x90
반응형

28. 포트(port)

28.1 포트란 무엇인가?

www.naver.com:80 으로도 네이버 홈페이지 접속이 가능합니다. 80이외의 숫자를 입력하면 접속이 불가능하죠.

80을 네이버의 포트 번호라고 합니다. 포트 번호는 생략이 가능합니다.

web server는 기본적으로 80번으로 접속하기로 약속되어 있습니다.

ssh server는 22번 포트를 사용합니다. 0~1024번을 well known포트로 불리는데요. 포트 번호를 명시하지 않아도 접속이 가능하도록 되어있습니다.



 · sudo nano /etc/ssh/ssh_config : ssh포트번호는 22번으로 되어 있습니다. 변경이 가능합니다.

 · sudo service ssh restart : ssh설정을 변경하였기에 재시작을 합니다.



28.2 port forwarding, 포트 포워딩이란?

ISP(Internet Service Provider)와 하나의 회선을 계약합니다. 인터넷을 사용하는 가전(노트북, 컴퓨터, TV, 스마트폰 등)이 1대 이상일 때 공유기를 통해 여러 개의 회선을 연결하여 인터넷을 사용하죠.

이때 라우터의 IP를 Public IPAddress(공용 IP), 여러 장비의 IP를 Private Address(사설 IP)라고 부릅니다.

외부인들은 public IP를 통해 접속을 하죠. 그렇다고 사설IP로 접속을 할 수 없는 것은 아닙니다.

바로 포트 포워딩(port forwarding)을 통해 외부인이 private IP주소로 접근 가능하도록 합니다.

예를 들어 router의 포트번호가 9000번일 때 211.46.24.37:9000 주소로 접근하게 되면 외부인은 회선을 통해 router에 도착을 합니다. 65000개의 포트 중 9000번 포트에 접속을 한 것이죠. 즉 9000번 포트의 신호가 192.168.0.4:80 컴퓨터로 이동하여 컴퓨터가 신호를 받아 컴퓨터에 저장되어 있는 웹 페이지가 출력되어 외부인에게 전달하는 것입니다.

router(공유기) 안 쪽에서만 통용되는 IP를 default gateway라고 합니다. 공유기가 갖고 있는 IP라는 의미를 갖습니다.



28.3 port forwarding, 포트 포워딩 실습

 · ip addr : inet 뒤에 주소가 자신의 IP를 나타냅니다. ifconfig역시 IP주소를 알려줍니다.

 · ip route : default gatewy의 IP주소를 알려주는 명령어입니다.



학교나 회사, 공공장소의 경우 default gateway로 접속하는 것은 불가능합니다.

 · curl http://ipinfo.io/ip : 공개 IP주소를 알려줍니다. 라우터의 IP주소입니다.

 · 사설 IP는 ip addr, ifconfig의 주소입니다.

아래의 화면은 default gateway에 접속하여 환경 설정을 해준 것 입니다. 

외부 사용자가 라우터의 IP주소:9000으로 접속하면 router로 접속하게 됩니다. router의 포트 번호를 9000번으로 지정한 것이고 사설IP:80으로 포워딩을 하게 됩니다. 웹 서버로 접속하여 공유기가 요청한 사용자에게 웹 브라우저 화면을 돌려줍니다.



29. 도메인(domain)

29.1 기본

client가 google.com을 입력하면 주소가 아닌 IPAddress(172.217.26.46)로 구글 서버에 접속하는 커넥션이 이루어집니다.

도메인(Domain)은 IP주소를 외우기 어렵기 때문에 google.com처럼 이름을 부여한 것입니다.

DNS(Domain Name System)은 DNS에 접속하여 구글의 IP주소를 172.217.26.46알려주는 서버입니다.

 · ping google.com : 구글의 IP주소를 알 수 있는 명령어


29.2 host파일

DNS가 나오기 전에 hosts파일을 사용하여 서버에 접속하였다고 합니다. host파일은 도메인이 어떤 IP주소이다라는 정보를 갖고 있는 파일입니다. 

 · elinks google.com : 구글의 홈페이지가 나옵니다.

 · elinks http://localhost/ : 개인 웹 서버 화면이 나옵니다.

 · sudo nano /etc/hosts : hosts파일 편집기로 이동합니다.

127.0.0.1(자기 자신을 나타내는 IP) google.com -> ctrl+x -> Y 빠져나옵니다.

 · elinks google.com : 구글의 홈페이지가 아닌 자신의 웹 서버 화면이 나옵니다.

host파일에 접속하려는 주소가 없을 때 DNS로 접속하는데요. 

각각의 컴퓨터를 host, host컴퓨터가 모여 있는 것을 network, network의 집단을 Internet이라고 합니다.

hosts파일 활용 예입니다.

운영하는 서버가 도메인에 등록되어 있어 사람들이 네이버, 구글과 같이 특정 서버로 방문할 수 있다고 합니다.

이때 서버에 결함이 발생하여 내용을 바꿔야 한다면 서버의 내용을 수정해야겠죠. 수정한 내용을 바로 서버에 반영한다면

실수가 발생할 수 도 있습니다. 이때 hosts파일이 자기 컴퓨터 개발 환경에서만 수정 가능하도록 하게 해줍니다.

host파일은 일시적으로 특정 도메인의 IP를 자기 컴퓨터로 수정할 수 있게 해주는 것입니다.

주의할 점이 있습니다. hosts파일은 해커들의 공격 대상으로 구글 사이트가 아니지만 구글과 같은 디자인의 사이트를 만들어 구글로 착각을 하게 하여 아이디와 패스워드를 가로채어 나쁜 짓을 한다고 하니 hosts파일을 사용할 때 주의해야 한다고 합니다. 백신 프로그램이 hosts파일을 보호하니 설치해두면 좋다고 하네요.


29.3 도메인 구입

 · cat /etc/resov.conf : Name Server IP주소를 확인할 수 있습니다.

도메인을 사용하기 위해서는 도메인을 구입해야합니다.

다양한 가격의 도메인이 존재하며 net.com(유료), ga(공짜)라고 하네요.

구글에 freedomanin : 도메인 구입을 위해 freenom 사이트로 이동합니다.

도메인을 입력하고 check availablity를 누르고 get in now -> check out(12개월까지는 공짜) -> continue -> 로그인 -> Complate Order -> 구매가 완료됩니다.

입력한 도메인으로 인터넷 모든 사용자가 접속할 수 있게 됩니다.

도메인으로 접속하는 것이 아니라 도메인의 IP주소를 확인하여 접속을 하는 것이죠.

host 도메인명 : 도메인의 아이피를 확인할 수 있습니다. 


29.4 서브 도메인

여러 개의 도메인을 사는 것은 비효율적입니다. 서버가 여러 개의 경우라면 도메인을 재사용할 수 있습니다.

각각의 도메인 앞에 서브 도메인을 붙임에 따라 ip를 부여한다면 1개의 도메인으로 여러 개의 서버를 사용할 수 있습니다.



29.5 DNS 동작 원리

 · dig +trace 도메인명 : DNS에게 도메인의 IP 의뢰한 결과 000.000.000.000 형식의 IP주소를 알려줍니다.

우리의 DNS root DNS Server 주소를 알고 있습니다. root DNS Server는 전세계 골고루 흩어져 있다고 합니다. root DNS Server가 없다면 도메인이 막히겠죠.  IP로는 통신이 가능이 가능합니다.

도메인을 구입하는 것은 ga에게 관리비를 내어 어떤 요청이 들어왔을 IP정보를 담고 있는 DNS 안내를 해줍니다.

DNS서버 구축 운용보다는 사업자의 DNS서버 구매를 통해 많이 사용한다고 합니다.


30. 인터넷을 통한 서버간 동기화(rsync)

30.1 rsync basic(remote sync)

인터넷을 통해 사용할 수 있는 편리한 기능의 사례에 대해 알아보겠습니다.

스마트폰에서 드랍박스나 구글 드라이브의 경우 sync한다는 표현을 사용합니다.

sync란 특정 컴퓨터의 내용을 다른 컴퓨터로 올려 반영하는 것입니다.

src디렉토리에 파일을 만들어 dest디렉토리에 동기화를 시켜보겠습니다.(쉽게 말해 복사를 한다는 의미)

 · mkdir rsync -> cd rsync/

 · mkdir src (source의 약자)

 · mkdir dest (destination의 약자) -> ls 2개의 디렉토리가 생성되었습니다.

 · cd src -> touch test{1..10} : test1~test10 10개의 파일이 생성됩니다.

 · cd .. : 홈 디렉토리로 이동

 · rsync -a src dest : dest디렉토리에 src디렉토리를 생성하는 명령어입니다.

 · rm -rf dest/src : dest디렉토리 밑에 src디렉토리를 삭제합니다.

 · rsync -a src/dest : 10개의 파일을 동기화(복사)하는 명령어입니다.

 · ls -al dest : 10개의 파일이 동기화 되었습니다.

 · cd dest -> rm test10: dest디렉토리에 test10파일을 삭제합니다.

 · rsync -av src/ dest : -av는 자세한 동기화를 의미합니다.

 · rsync --help : rsync의 도움말입니다.

rsync는 계속 반복하여 실행 가능하기에 편리하다고 합니다.



30.2 Remote sync

 · ip addr : 상대 컴퓨터로 동기화하기 위해 IP주소를 알아야합니다.

 · rsync -azP~/rsync/k8805@192.168.0.65:~/rsync/dest : z는 압축의 의미, p는 전송 사항을 보여줍니다.

상대방의 IP주소를 입력 후 동기화 시키고 싶은 디렉토리를 지정하는 명령어입니다.

~은 k8805라는 사용자의 홈 디렉토리에 rsync디렉토리 밑에 dest디렉토리로 동기화 하겠다는 의미입니다.




생활코딩 리눅스 강의






728x90
반응형
728x90
반응형

+ Recent posts