리눅스의 기초(4-5) ssh server
###1 ssh server
- secure shell
- openssh-server
##1. ssh(secure shell) : 통신 구간을 암호화
#1. 암호화 되지 않은 통신을 사용하던 telnet 서비스를 대체
=> telnet 의 프로토콜 테스트 기능은 nc, curl 로 대체
#2. 리눅스 서버들은 기본적으로 ssh서비스 탑재
#3. 리눅스의 ssh는 openssh 사용
##2 sshd
#1. ssh daemon (ssh server 의미)
#2. ssh (ssh client 의미. 해당 명령어가 ssh client CLI 유틸리티 임)
##3. SSHD 서버 준비작업
st -1. sshd 서버 설치 여부 확인
st -2. sshd 서비스 실행여부 확인
==> LISTEN 상태도 확인: ss -nlt or ss -nltp
st-3. ssh port(22/tcp)가 방화벽에 허용되었는지 확인
**
n : numeric
l : listen
t: tcp
p: process (root 권한 필요)
#4 st -1. sshd 서버 설치 여부 확인
(devian)
# apt list openssh*
(RH)
# rpm -qa openssh-server
# yum -y install openssh-server
설치가 안되있어
$ sudo apt-get install openssh-server
https://wickedmagica.tistory.com/101 참조
설치하면된다.
그리고
systemctl start sshd 를 입력하면 설치가 된다.
#5 st -2. sshd 서비스 실행여부 확인
1) systemd 기반이면 systemctl 로 확인.
systemctl status sshd 입력해야함.만일 Unit sshd.service could not be found. 이나오면 위 openssh-server 를 설치하자
Active 에 running이 뜨면 실행이 되는거다.
#5-2 부팅할 때 sshd 서비스가 실행되도록 하고자 한다면
systemd 기반: systemctl enable sshd 입력 (enable 에 --now 옵션 사용 시 start 기능까지 수행)
#5-3 LISTEN 상태도 확인: ss -nlt or ss -nltp
ssh port(22/tcp) LISTEN 상태확인하기
1) ss -nlt or ss -nltp
INADDR_ANY => 0.0.0.0 ==> IPv4 주소, 우리는 IPv4, IPv6 두 주소가 있기때문에(참고로 하기 22는 IPv6주소, 상기는 IPv4주소)
port 22가 두개가 있는거다
#6. st-3. ssh port(22/tcp)가 방화벽에 허용되었는지 확인
1) iptables (혹은 firewall-cmd, ufw)를 이용.
iptables -nL 로 방화벽 체크. (모두 허용된 상태 == 방화벽 비활성상태 이다)
방화벽 허용되면 해체 하는게 좋다.
#6-1 방화벽은 어떻게 끄나? (우분투)
1) ufw
=> status, enable
"방화벽 체크
# ufw -h // 명령어 볼수 있음
# ufw status
Status: inactive 되있다면?
# ufw enable
끄고자 한다면
# ufw disable
#6-2 allow <port number|port symbol>[/protocol] 방화벽 꼭 킨 상태에서 사용하고자한다면
# ufw allow 22/tcp //22==ssh
# ufw allow http/tcp
###2. ssh : client
- Linux ssh client
- Window ssh client
##1. Linux 혹은 UNIX like 시스템은 ssh 사용
ssh [-p port] [username@]<host address>
==> ssh 192.168.52.110 //ssh만 쓰면 유저명이 생략, 22번 포트 사용
==> linuxer@192.168.52.110 // 다른 유저명(eg. linuxer) 사용시 유저명 타이핑해야함 , 22번 포트 사용
==> -p 20022 192.168.52.110 // p: port num
@는 AT의미.
-p 20022 포트번호 ) 포트번호를 보안으로 인해 사용하는 경우가 있다,
전부 22번 포트로 붙는다.
첫 번째는 아이디가 없기에, default인 자기가 로그인한 유저 네임이 깔려있다. 다른 유저를 사용시 해당유저이름을 써야함.
##2. putty 설정 (putty 나중에 체킹 해보기)
##3 ssh-keygen
ssh접속 시 키 기반 통신을 해야하는 경우가 많다.
1) 개인용에서는 패스워드를 쓰지 않지만 기업에서는 "" 대신 패스워드를 사용해야함.
2) key 위치 : ~/.ssh
#2. pubkey 기반 연결(높은 신뢰성)
$ ssh-keygen -N ""
“” pass press를 안쓴다는 의미.
“” 없을 시 키를 풀때마다 password를 써야함
ssh-copy-id jlim@192.168.52.110 // 접속할 상대 서버
$ ssh jlim@192.168.52.110 // 통신하기 처음엔 암호 물어봄 그 이후 안물어봄
=> ssh-copy-id 는 remote 의 ~/. ssh/authorized_keys에 복사하는과정
key 생성하면 그 key를 접속할 서버에 copy하는 경우가 있다.
접속할 상대서버에 접속 시 copy할때만 암호물어보고 그 이후는 암호 안물어봄.
$ ssh -t jlim@192.168.52.110 w
${HOME}의 권한이 700 아니라면 키 기반 연결이 거부됨 (보안)
w: 내 서버가 아닌 상대서버에서 이뤄진 결과를 알려줌
내 서버가 192.168.52.20 이면, 110번으로 접속해서 상대서버에게 명령을 내리고 그에 대한 결과값을 상대버가 내 서버에게 알려줌
#3 ssh -keygen
1) -p
=>암호변경
=> key 위치 : ~/.ssh
2) -R <host>
=> known_Host에서 remote host 키 제거: 기본위치(~/.ssh)
HTTP/others utils
- curl
- wget
- nc
###1. curl
##1. URL을 기반으로 통신하는 기능제공 (HTTP, HTTPS...)
1) 기능에 대해선 man page 참조
2) 사용법: curl [options] <URL>
EX
$ curl http://www.google.com
$ curl https://www.google.com
내용 출력됨.
파일 저장법
$ curl -O http://www.google.com/docs/manual.html
... manual.html 파일로 저장
$ curl -o google.html http://www.google.com
... URI에 파일명이 없으므로 -o 옵션으로 직접 지정
#2 curl : download
1) curl -C - -O <URL>
$ curl -c - -o http://blah.org/blah.iso
... -C <offset>: continue-at <offset>
큰 파일도 다운가능
다운받다 도중 끊어져서 다운 못받으면
-c : 도중에 다운로드되는 offset을 continue가 받아서 이어서 다운을 받는 기능가짐.
#3 curl <API URL>
$ curl v2.wttr.in/Seoul
api서버에서 특정값받을 때도 사용
상기는 날씨와 온도 api
=> alias로 잡아서 사용하는 사람들이 많다
#4 wget
wget<URL>
1) 파일다운에 특화된 기능이 있어 웹사이트를 복제할 때 사용
$ wget http://..../
#5 nc (netcat)
1) network 기능이 가능한 cat
2)server , cclient 양쪽 기능이 가능
1) 간단한 간이 서버, 클라이언트로 사용가능
2) 바이너리 통신가능
$ nc -k -l 5000
$ echo Hello | nc 127.0.0.1 5000
$ nc 127.0.0.1 5000
....interactive mode
nc –k –1 5000 //TCP 5000번으로 띄움
2번쨰는 Hello 메시지를 해당 ip에 보냄
3번째 간이 통신가능
**신기한 기능
터미널 tab : ctrl + shif + t
해당 내용은 프로그래머스 리눅스 강의 김선영 선생님의 강의를 들으며 기록했습니다.