원격자 PC 에 접근하기 위해 사용되는 프로토콜

  • 텔넷에 키 교환(암호화) 알고리즘을 도입한

용도

  • 데이터 전송:
    • github에 push 작업을 할 때 SSH 를 통해 파일을 전송하게 된다.
  • 원격제어:
    • Linux 같은 shell로 돌아가는 pc의 원격제어

SSH 포트포워딩 (터널링)

SSH로 하는 터널링 기능

  • 22 포트를 통해 SSH로 접속을 하여 해당 PC의 내트워크 망으로 접속 할 수있게되는 기능
  • 서버쪽에서는 22번 포트만 열어놓고 DB나 기타 서비스 포트는 외부 접속을 차단한체 SSH 포트 포워딩을 통해서만 접근하게 하여 보안적인 이득을 챙길 수 있다

Local Port Forwarding

특정 포트로 구동되는 서비스를 localhost 포트로 매핑시키는

ssh -L 1234:Host:8080 user@Host
  • SSH 호스트에 8080 포트로 서비스 되고있는 프로그램이 있을 때
  • 이를 localhost:1234 에 메핑 시킨다, 즉 나는 localhost:1234 에 요청하면 SSH 가 포트 포워딩을 통해 Host:8080 포트에 전달 되게 한다
  • Host 본인 한테 굴러가는 서비스 뿐만 아니라 해당 네트워크망에 있는 모든 서비스를 포트포워딩 하는것도 가능하다
    • 포트포워딩 하려는 서비스가 다른 pc여도 상관 없다는 것(Host PC 망 안에 포함만 되있으면 됨)
  • DBMS 에 SSH 터널 기능이 바로 이것이다

Remote Port Forwarding

SSH 연결하려는 서버를 클라이언트로 사용해서 연결하는

  • 22번 포트를 포함한 모든 포트가 막혀있어도 나가는 연결이 막힌게 아니기에
  • 서버가 클라이언트가 되면 해결 된다는 것이다
  • 즉 클라이언트에서 SSH 데몬이 실행중 이고, 클라이언트에 포트가 막히지 않는다면 이다.

Server

 ssh -R 8585:127.0.0.1:80 192.168.1.200
  • 192.168.1.200는 클라이언트 ip 주소
  • 127.0.0.1:80 에서 실행중인 서비스를 클라이언트는 8585 로 매칭 시켜준다

Clinet

# localhost:8585 에 get 요청 날리는 스크립트
curl localhost:8585
  • 서버가 연결한 경우 localhost:8585 요청하면 서버의 127.0.0.1:80 포트로 요청이 가게 된다

Dynamic port forwarding

SSH를 아예 프록시 서버로 쓰는

ssh -D 9090 -N -f user@host
  • 9090 포트에 SOCKS 프록시를 생성해준다.
  • SOCKS 프록시를 사용하는 모든 응용 프로그램이 SSH 서버에 연결
  • 아예 해당 네트워크 망에 1:1로 메핑 시켜준다.
  • 완전히 해당 네트워크에 접속시켜주는 VPN 같이 아예 외부 ip 주소까지 해당 네트워크로 바뀐다
  • 이걸통해 해당 서버 공유기 설정페이지 가는게 가능
  • 실제 구현은 여기서