프로그래머스/리눅스

리눅스의 기초(4-5) ssh server

junl 2022. 11. 6. 23:55

###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 : 도중에 다운로드되는 offsetcontinue가 받아서 이어서 다운을 받는 기능가짐.

 

 

#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

 

 

해당 내용은  프로그래머스 리눅스 강의 김선영 선생님의 강의를 들으며 기록했습니다.