SSHIntro

Clunix Wiki

목차

SSH Intro

개요

본 문서에서는 SSH에 대한 간단한 소개와 사용법을 기술한다.


SSH

  • secure shell, 보안 채널을 이용한 원격 터미널 접속 제공
  • plain text로 transport를 사용하는 telnet과는 다르게 보안화된 transport를 사용하여 외부적으로 사용하기에도 적절하다.
  • 사내 혹은 외부에서 사내에 접근할 때에도 모두 ssh를 사용한다.
    • telnet이 서비스 되는 사내 서버는 없습니다. 보안상 취약하기 때문
    • ssh 서비스를 제공하는 ssh daemon(sshd)는 TCP 22번 포트를 사용한다.

SSH Client

  • ssh 서비스로 원격 시스템에 접속하기 위해서는 ssh client가 필요
  • Windows용 클라이언트는 terraterm이나 zterm 같은 전용의 클라이언트가 있음. 그러나 xmanager같이 windows용 X server를 설치한 후 SSH를 transport로 하여 xterm 같은 application을 이용하는 방법을 가장 추천
    • 적어도 네트워킹 속도에 문제가 없는 사내에서는 이방법이 가장 좋음
    • 집에서 혹은 사외에서 이용하는 경우에는 네트워킹 속도나 대역폭때문에 X application을 수행하면 속도가 떨어 질수 있으므로, 차라리 윈도우 원격 접속을 하여 windev07같은 곳에서 xmanager를 이용하는 것이 좋을 듯
  • 리눅스 시스템에서는 ssh program을 사용한다.
  • ssh 매뉴얼 확인
# man ssh
  • 접속 예제(ecm02 시스템에 cezanne 계정으로 접속)
# ssh cezanne@ecm02
  • 현재 사용자 ID로 ecm02에 접속
# ssh ecm02

사용자 인증

  • SSH에서 사용자 인증을 하는 방법은 여러가지가 있는데, 기본적으로는 사용자 이름과 암호 조합으로 인증을 할 수 있다. (그러나 서버 설정에 따라서 이 경우를 배제할 수도 있음)
  • 혹은 RSA와 같은 보안 인증을 이용할 수도 있는데, 암호 입력 과정이 성가시거나 ssh를 transport로 하여 그 상위에서는 다른 작업을 수행하는 경우(예를 들어 ssh상에서 cvs를 수행한다던가 하는 경우)에는 암호 입력 방식이 바람직 하지않다.


공개키를 이용한 사용자 인증

패스워드 기반의 접속의 경우 매번 암호를 입력해야 하는 불편함이 있다. Openssh는 Public Key 방식의 사용자 인증을 제공한다. 신뢰된 호스트간에는 Public Key 방식이 여러모로 편리하다.

  • Private/Public Key 생성

생성할 키 형식을 -t 옵션과 함께 ssh-keygen 명령을 호출. rsa외에 dsa 옵션도 가능, Public/Private Key 생성 방식의 차이임

# ssh-keygen -t rsa -C username@clunix.com
  • private/public key를 저장할 장소와 passphrase를 묻는 prompt가 뜨는데, passphrase는 empty로 두어야 passphrase를 입력하는 수고를 덜 수 있다.
  • 그러나 Private Key에 대해서 passphrase를 설정하여 Private key 접근을 통제하는 것도 필요하다.
  • ssh-agent를 이용하면 반복적으로 입력할 필요 없이 초기에 한번만 입력하면 된다. 대부분의 Desktop 환경에서는 private key를 관리하는 ssh-agent가 자동으로 수행된다.
  • 또한 키 생성시 -C 옵션을 이용하여 자신의 이메일 계정을 comment로 추가하는 것이 바람직하다.

성공적으로 Key를 생성한 경우 ~/.ssh 아래에 id_rsa와 id_rsa.pub가 생성된다. id_rsa.pub의 공개키의 내용을 복사하여 접속하고자 하는 시스템의 ~/.ssh/authorized_keys에 내용을 추가한다. authorized_keys 파일의 접근권한은 보안상 사용자만 읽기쓰기 권한이 주어져야 한다.

Passphrase가 설정된 Private Key 이용

Passphrase를 설정하여 Private Key를 생성한 경우에는 ssh 연결시 해당 Passphrase를 입력하여야 Private Key 접근이 가능하다. 공개키 기반으로 SSH 인증을 하더라도 Passphrase를 입력해야 하는 불편함이 발생하게 되는데, 이와 같은 불편함을 없애기 위해 ssh-agent를 이용하여 passphrase를 자동으로 관리할 수 있다.

ssh-agent는 사용자로 부터 passphrase를 초기에 한번 입력 받는다. 이후 private key의 passphrase가 필요한 경우, ssh-agent 수준에서 자동으로 관리하여 ssh daemon과의 인증 과정을 처리하게 된다. 네트워크로는 private key나 passphrase를 통신하지 않고, 로컬시스템의 UNIX Domain 소켓을 통하여 안전하게 사용자의 통신을 수행한다. ssh client는 SSH_AUTH_SOCK 환경 변수에 정의된 UNIX Domain Socket으로 ssh-agent와 통신한다.

GNOME 데스크탑의 경우에는 로그인시 ssh-agent가 자동으로 수행되지만, 원격으로 접속한 dummy terminal에서는 직접 ssh-agent를 구동하여 passphrase 입력 과정을 1회로 줄일 수 있다.

$ eval `ssh-agent -s`
$ ssh-add

ssh-agent는 수행시 shell에서 설정해야 하는 명령을 표준 출력으로 표시한다. command substitution을 eval로 수행하는 이유이며, -s는 bash 기준으로 출력함을 뜻한다. (SSH_AUTH_SOCK과 SSH_AGENT_PID 환경변수 설정을 표준 출력에 표시함)

초기 ssh-agent 는 private key를 가지고 있지 않으며, ssh-add 를 통하여 기본 위치에서 private key를 불러온다. ssh-add 수행시 passphrase를 입력하도록 요청함

SCP

  • ssh를 transport로 하여 파일을 복사할 수 있는 명령
  • ssh + cp 정도로 이해할 수 있다.
# scp *.txt cezanne@ecm02:/tmp

현재 디렉토리의 *.txt 파일들을 ecm02의 /tmp로 복사

# scp *.txt ecm02:

ecm02상의 현재 사용자 ID에 대응하는 홈 디렉토리로 복사

# scp -r mydir ecm02:

하위 디렉토리까지 모두 복사

부서별 위키