리뷰:
ICM -> Install Configure Management
셸 스크립트란? 셸에서 실행될 커맨드 라인을 입력해 놓은 파일
단순히 명령어를 나열하기도 하지만, 조건 분기와 반복과 같은 복잡한 제어 구조도 사용 가능.
장점:
- 작업 자동화 가능. 복잡한 명령어를 직접 입력하는 수고를 덜 수 있음.
- 셸 스크립트를 한번 작성하면 이후에 비슷한 처리를 수행할 때 쉽게 재사용 가능.
- 다른 사람에게 셸 스크립트 공유 가능.
- 명령어를 잘못 입력하는 실수 방지 가능.
셸 선택: 셸 종류가 여러가지이므로, 어떤 셸을 쓸지 정하고 사용해야됨. 실습에서는 bash사용. sh, bash, 본쉘(Bourne Shell)...
sh를 사용해도 호환성 문제가 존재함.
쉘 스크립트 작성 -> Vim과 같은 텍스트 에디터로 입력
du -sh .
-> 현재 파일의 파일 사용량 출력.

#! -> 셔뱅(shebang).

-> 파일 크기를 출력하는 homesize.sh 파일 생성 후, chmod 명령어로 +x로 지정하여 실행 권한 부여.

-> ./로 파일 실행. 정상 동작하는것 확인 가능.
#! -> 셸 스크립트에서 파일의 시작이 #!인 경우, 뒤의 명령어를 실행함.
source 명령어 -> source 명령어는 지정한 파일 안의 커맨드 라인을 쉘에서 직접 입력한 것과 동일하게 실행. #!으로 지정한 쉘이 아니라 현재 쉘이 사용되며, 파일을 직접 실행하는게 아니므로 파일에 실행 권한을 부여할 필요가 없음.
. 명령어 -> source 명령어와 완전히 동일하게 동작.

실행 방법 정리:
- 파일 이름만 실행.
- 쉘의 인자로 지정하여 실행.
- source 명령어를 사용하여 실행. -> 현재 설정된 쉘 환경에 영향을 받음.
source 명령어 사용시 파일이름 사용 이유 -> #!에 지정한 쉘에서 실행되기 때문에 현재 사용자가 사용하는 쉘에 영향을 받지 않음. -> 현재 쉘의 환경에 따라 실행이 안될 수도 있고, 현재 쉘의 변숫값이나 별명을 바꿀 수도 있기 때문.
./ -> 파일 이름 앞에 ./를 사용하지 않는 경우 명령어 실행 불가. -> 검색 경로에 등록된 디렉토리에 있지 않은 이상 쉘 스크립트를 이름만으로 실행할 수 없음. -> 상대 경로나 절대 경로로 파일의 위치 지정시 실행 가능.
which 명령어 -> 지정한 명령어의 위치를 출력.

echo 명령어 -> 검색 경로(쉘에서 명령어를 실행할 때 명령어 파일을 찾는 디렉토리) 확인 가능.

source 명령어 사용시 주의점 -> 파일 이름만 지정 가능. PATH에 지정된 디렉토리에 있는 쉘 스크립트라면 상대 경로나 절대 경로가 아닌 파일 이름만 지정 가능. -> 이름만으로 지정 하는 경우, 의도치 않은 스크립트 실행의 위험성이 높아짐.
shopt 명령어 -> sourcepath 옵션 비활성화 -> source 명령어에서 PATH에 지정된 디렉토리에서 파일을 찾지 않도록 설정 가능
ssh와 공개키 인증:
OpenSSH 패키지는 보안 쉘과 SSH프로토콜을 제공함
SSH 프로토콜 ->
SSH 명령어는
ubuntu 에서 ssh server 설치:
- root 사용자로 권한 상승 후, apt install openssh-server 입력.
- 설치 진행 및 systemctl 명령어를 이용해 설치 확인

우분투를 설치한 vm은 내부-외부 통신을 위해 enp0s3(NAT 방식)을 외부로, enp0s8은 내부(centOS가 설치된 VM)와의 통신을 위해 각각 동적 ip, 정적 ip(내부통신, 192.168.56.102/24)로 설정해야 됨. -> 두 ip가 같은 경우 외부 통신 불가.(= ssh server 설치 불가)
.
- centOS VM에서 ssh <설정했던 ip> 입력 ->ubuntu의 ssh서버로 접속 시도. -> 암호를 입력해도 접속 거부됨.
- ssh <사용자 계정>@<설정한 ip> 입력 -> 접속 됨. 
-> SSH Client 와 SSH Server 통신시 client에서 key pair를 만들고 Private key는 들고있고, Public key는 server로 보냄. -> client가 server에 접속할 때 서버가 public key로 암호화해서 데이터를 넘김. -> client는 자식이 갖고있던 private key, public key를 조합해 복호화함.

원격 linux 서버에 암호 없이 접속하기.
ssh-keygen 입력 -> public, pravite key 생성.

ssh-copy-id <사용자 계정>@<서버의 ip> 입력 -> local host의 public 키를 원격 host의 authorized_keys 파일에 복사.

-> 이후 연결에서는 암호를 물어보지 않음.
연결된 클라이언트들 확인 -> 잡속한 사이트에서 w 명령어를 통해 학인 가능. -> 명령어

ssh 접속시 사용자 계정명을 입력하지 않는 경우 -> root로 접근하는 것이 기본값임.

-> vi 로 sshd_config 내용 편집. PermitRootLogin을 yes로 변경.
-> set nu로 행 번호 출력 후 변경할 내용을 찾아서 변경.
-> root로 접근해도 로그인 됨을 확인.