[Network] ssh

markyang92·2021년 10월 2일
0

network

목록 보기
10/21
post-thumbnail

ssh

  • openssh
    • client: ssh
    • server: sshd
  • dropbear

  • ssh 기능
    • 비밀번호와 모든 다른 세션 데이터를 암호화하여 snooper들로부터 보호한다.
    • X 윈도우 시스템 크라이언트의 연결을 포함하여 다른 네트워크 연결을 터널링한다.
    • 거의 모든 OS를 위한 클라이언트들을 제공한다.
    • 호스트 인증 키를 사용한다.

SSHD 서버

  • sshd를 실행하려면, 설정 파일과 호스트 키가 필요하다.
    • 대부분 배포판들은 /etc/ssh 설정 디렉토리에 이런 설정들을 유지한다.
    • sshd 패키지를 설치하면 적절하게 모든 것이 설정된다.

  • /etc/ssh
    • sshd 설정: sshd_config
    • ssh 클라이언트 설정: ssh_config

SSH 서버 시작

  • 대부분의 배포판은 ssh를 탑재하고 있지만 디폴트로 sshd 서버가 시작되지는 않는다.
$ chkconfig sshd on
$ service sshd start
  • fedora는 처음 sshd스타트 업 때, 호스트 키 파일이 없으면 호스트 키 파일을 생성한다.
  • 스타트 업 때, sshd는 자신의 PID를 /var/run/sshd.pid에 기록한다.

/etc/ssh/sshd_config

  • /etc/ssh/sshd_config!
Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
ColumnDescription
HostKey filefile 을 호스트 키로써 사용한다. (호스트 키들이 간단하게 묘사된다.)
LogLevel levelsyslog 레벨 level 을 통해 메시지를 기록한다.
PermitRootLogin value만약 valueyes로 설정되어 있다면, 슈퍼 사용자가 SSH로 로그인하는 것을 허용한다.
반대로 로그인을 막으려면 valueno 로 설정한다.
SyslogFacility namesyslog 퍼실리티 name 으로 메시지를 기록한다.
X11Forwarding valuevalueyes 로 설정된 경우 X 윈도우 시스템 클라이언트 터널링을 허용한다.
XAuthLocation pathxauth를 위한 경로를 제공한다.
X11 터널링은 이 경로가 없으면 동작하지 않을 것이다.
만약 xauth/usr/bin에 없다면, xauth에 대한 전체 경로명으로 path 를 설정한다.

호스트 키

  • OpenSSH는 세 가지 세트의 호스트 키를 갖고 있다.
    • 1개는 프로토콜 버전 1을 위한 것
    • 2개는 프로토콜 버전 2를 위한 것
    • 각 세트는 공개 키(.pub)개별 키를 갖는다.
      • 주의 다른 사람들은 공개 키(.pub)만 봐야한다!!!!!
  • ssh ver 1: RSA키만 가지고 있다.
  • ssh ver 2: RSA와 DSA 키들을 가지고 있다.
  • OpenSSH Key 파일들
파일 명설명
ssh_host_rsa_keyPrivate RSA key (ver 2.)
ssh_host_rsa_key.pubPublic RSA key (ver 2.)
ssh_host_dsa_keyPrivate DSA key (ver 2.)
ssh_host_dsa_key.pubPublic DSA key (ver 2.)
ssh_host_keyPrivate RSA key (ver 1.)
ssh_host_key.pubPublic RSA key (ver 1.)

호스트 키 생성

  • ssh_keygen 프로그램을 사용한다.
$ ssh-keygen -t rsa -N '' -f /etc/ssh/ssh_host_rsa_key
$ ssh-keygen -t dsa -N '' -f /etc/ssh/ssh_host_dsa_key
  • 버전 1 키의 경우는 다음과 같이 한다.
$ ssh-keygen -t rsa1 -N '' -f /etc/ssh/ssh_host_key

known_hosts

  • 호스트 기반 인증 사용 시, 서버의 known_hosts 파일은 반드시 모든 신뢰할 수 있는 클라이언트들에 대한 공개 호스트 키들 포함
  • 머신을 교체할 때, 이전 머신으로부터 키 파일들을 가져올 수 있다.
    이는 새로운 머신에 연결할 때, 사용자들이 키의 불일치로 곤란을 겪지 않게 할 수 있다.

ssh-key

생성

Windows

  1. 'OpenSSH' 설치 여부 확인
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*' # 입력
# This should return the following output:

Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

# 그런 다음 서버 및/또는 클라이언트 기능을 설치합니다.

# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# Both of these should return the following output:

Path          :
Online        : True
RestartNeeded : False

  1. cmd에서 공개키 저장 디렉토리로 간다.
C:\Users\UserID\.ssh

  1. id_rsa, id_rsa.pub 존재 유무 확인

  1. 없으면 공개키 생성
ssh-keygen -t rsa -b 4096
# 걍 엔터 연타
C:\Users\UserID\.ssh\id_rsa, id_rsa.pub 생성

Ubuntu

  1. $HOME/.ssh/id_rsa, id_rsa.pub 공개키 존재 유무 체크
$ ls $HOME/.ssh

# 폴더도 없으면.. OpenSSH 관한거 다 설치

$ mkdir -p ~/.ssh
$ chmod 700(rwx------) ~/.ssh

  1. 없으면 생성
$ ssh-keygen -t rsa -b 4096
# 엔터 연타
$ $HOME/.ssh/id_rsa{,.pub} 로 생성됨

전송

  • 반드시 id_rsa.pub를 보내야한다.
  • remote host에 authorized_keys에 추가해야한다.
  • remote host에 ssh환경이 설치되어 있지 않으면 설치..해라.
(remote server) $ sudo apt install openssh-server

공개키 등록(authorized_keys)

  • 환경도 만들어 주고..
(remote server) $ mkdir -p ~/.ssh
(remote server) $ chmod 700 ~/.ssh
(remote server) $ cat '전송 받은 id_rsa.pub' >> ~/.ssh/authorized_keys
(remote server) $ chmod 600(rw-------) ~/.ssh/authorized_keys
(remote server) $ rm '전송 받은 id_rsa.pub'

내 컴(known_hosts)

  • 내 컴퓨터에선 $HOME/.ssh/known_hosts로 관리된다.

내 컴(.ssh/config)

  • 또 내컴에서 remote host를 관리할 수 있는 파일이 있는데 바로 .ssh/config 이다.
# ==== $HOME/.ssh/config ===== #
Host MyRemoteHostServer
    HostName 127.58.27.12 # remote host ip
    User pllpokko # remote host user
    Port 8888 # fortforward 외부 포트 8888->22

공개키 에러

WARNING: ~~ CHANGED!

  • WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    • 굉장히 빈번한 에러인데, remote server(192.168.0.7)에 ssh 접속을하다가 remote server에 연결된 이더넷 LAN을 다른데 꽂았는데 같은 IP를 쓰는 경우 발생
    • Man in the Middle Attack(중간자 공격) 경고이다.
      • 기존 서버가 알고 있는 정보를 찾아갔더니 전혀 다른 서버로 접속이 된것
      • 스푸핑 현상
    • 아래 명령어로 초기화 한다.
# My Local computer(client)
$ ssh-keygen -R [server IP]

# 혹은
$ $HOME/.ssh/known_hosts에서 server IP 제거

server에서 hosts.deny

  • 직접 서버의 /etc/hosts.allow에 내 IP 등록 시켜야함

server의 ssh-key가 바뀐경우

  1. server의 ssh-key가 바뀌면, 내 local computer의 .ssh/known_hosts에서 충돌이 난다.
  2. 아래의 명령어 입력할 것 (서버의 .ssh/authorized_keys에는 내 id_rsa.pub가 들어가 있으니 되는 것)
# client
$ ssh-keygen -f $HOME/.ssh/known_hosts -R [server IP]
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글