사이트 내 전체검색
SSH 설치/설정/사용법
로빈아빠
https://cmd.kr/server/64 URL이 복사되었습니다.

본문

SSH 란?
SSH (Secure SHell)은 말 그대로 보안 로그인 쉘이다

SSH 구할수 있는곳

SSH 의 원 제작처인 http://www.ssh.com (핀란드 회사) 와 http://www.openssh.org가 그것이다.

설치
서버는 간단하게 패키지를 설치하거나 직접 소스를 설치할 경우 일단 보안을 위한 Privilege separation을 위해 sshd 유저와 디렉토리를 만들어 준다.

$ mkdir /var/empty/sshd
$ chown root:sys /var/empty/sshd
$ chmod 755 /var/empty/sshd
$ groupadd sshd
$ useradd -g sshd -c 'sshd privsep' -d /var/empty/sshd -s /bin/false sshd
 


ssh 컴파일 옵션:

configure --with-pam \
  --with-ipv4-default \
  --with-rsh=/usr/bin/rsh \
  --with-default-path=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin \
  --with-privsep-path=/var/empty/sshd
 
서버 설정

서버 설치가 끝난후 설정 파일(/etc/ssh/sshd_config)의 옵션들을 살펴보자. 대부분의 경우 기본 설정파일 그대로 사용하여도 좋지만, 특정 그룹이나 유저들에게만 로그인을 허용하도록 할 경우 다음 지시자를 사용할수 있다.


AllowGroups

ssh 로그인을 해당 그룹으로 제한한다. 각각의 그룹명은 공백으로 구분한다. 와일드 카드(* 와 ?)를 사용할수 있다.

AllowUsers

ssh 로그인을 해당 유저로 제한한다. 사용법은 AllowGroups과 같다.

DenyGroups

AllowGroups의 반대 역할을 한다. 지정된 그룹은 로그인이 거부된다.

DenyUsers

AllowUsers의 반대 역할을 한다. 지정된 사용자는 로그인이 거부된다.

이외 사용자들의 sftp 사용을 허용하려면 다음과 같은 라인이 있는지 확인한다.

Subsystem  sftp  /usr/lib/openssh/sftp-server
 
 


기본적인 사용법

openSSH 클라이언트는 ssh1,ssh2 프로토콜을 모두 지원하므로, 서버가 지원하는 ssh 프로토콜에 상관없이 접속할수 있다.

> ssh -l 아이디 ss.xcool.net [엔터]
또는
> ssh 아이디@ss.xcool.net [엔터]


처음에 접속하면 다음과 같은 메세지와 함께 접속이 진행될 것이다.

The authenticity of host 'gate.eunjea.org (192.168.1.1)' can't be established.
RSA1 key fingerprint is e3:56:xx:b4:19:7e:xx:b1:7e:cd:xx:fe:5e:5b:17:66.
Are you sure you want to continue connecting (yes/no)?
 
yes 라고 대답하면 암호를 묻는다

Warning: Permanently added 'gate.eunjea.org,192.168.0.26' (RSA1) to the list of known hosts.
ss@ss.xcool.net password:

암호 적고 인증되면....텔넷과 같은 방법으로 사용하면된다


인증키 사용하기

인증키를 사용하는 것은 로그인 할때마다 암호를 직접 입력하는 것보다 더욱 안전하며, 하나의 암호로 여러 ssh서버에 접속할수 있는등의 장점을 가진다.

인증키는 ssh-keygen로 만든다.

인증키는 ssh-keygen로 만든다. 키를 만들때는 사용할 키의 형태를 지정해 주어야 하는데 원격 서버가 ssh 프로토콜 버전 2를 지원한다면 ``rsa'' 또는 ``dsa'', 프로토콜 1만을 지원한다면 ``rsa1''을 사용한다.

예를 들어 원격 서버가 ssh2를 지원하고, ``rsa'' 키를 만들고자 한다면,

[ home@foo ]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ss/.ssh/id_rsa):
 
키가 저장될 곳과 이름을 물어 오는데 디폴트로 그냥 엔터를 치고 넘어가면, 다음과 같이 인증키 암호를 물어온다. 원하는 암호를 두번 반복해서 입력해주면 키가 생성된다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ss/.ssh/id_rsa.
Your public key has been saved in /home/ss/.ssh/id_rsa.pub.
The key fingerprint is:
64:09:73:19:9e:ac:a0:f7:aa:c3:08:f9:0e:5a:fe:61 ss@ss.xcool.net
 
인증키 생성시 인증키 암호를 공백으로 (passphrase 를 물어올때 그냥 엔터를 치면 된다) 만들수도 있는데, 이것은 ssh 접속시 암호를 입력하지 않아도 그냥 접속이 되므로 편리할수는 있으나, 만약 당신의 인증키가 어떠한 경로로든 유출되었을 경우를 생각 해보면 피해야 할 것이다. 그리고 ssh-add와 ssh-agent를 사용하여 접속시마다 인증키 암호를 입력하지 않는 방법이 있다.

공개 키 사용하기

이제 ~/.ssh/ 안에 한쌍의 키(id_rsa 와 id_rsa.pub)가 생성되어 있을것이다. .pub 확장자가 붙은 것은 공개키로 이 파일을 접속할 리모트 서버들의 ~/.ssh/ 에 authorized_keys 라는 이름으로 복사해준다.

> scp ~/.ssh/identity.pub ss@ss.xcool.net:.ssh/authorized_keys
 
이제 ssh 접속을 진행 해보면 계정암호가 아닌 인증키 암호를 물어볼 것이다. 만약 계정 암호를 물어본다면 원격 서버상의 ~/.ssh 디렉토리나 공개키 권한의 문제이므로, 일단 접속후 chmod 755 ~/.ssh 그리고 chmod 644 .ssh/authorized_keys 해준다.

rsa1 방식의 ssh1 프로토콜의 사용할 것이라면 ssh-keygen -t rsa1 으로 키를 만들고, 공개키 (identity.pub)를 같은 방법으로 원격 서버의 ~/.ssh/authorized_keys 에 추가해 주면 된다.

키 파일을 다른 이름으로 저장했거나 서버마다 다른 키를 사용하려면 ssh에 -i 옵션을 사용해 키 파일을 직접 지정해 주면 된다.



인증키를 메모리에 상주 시키기

다음 방법으로 인증키를 메모리에 기억시켜 두면 처음 한번만 인증키 암호를 입력하면 다음부터는 암호를 입력하지 않아도 같은 인증키를 사용하는 모든 서버들에 접속할수 있다.

[foo@home silver]$ eval $(ssh-agent) [Enter]
다음과 같은 메세지를 보여줄 것이다.
Agent pid 31234
이제 ssh-add 를 입력하면
Identity added: /home/silver/.ssh/identity (silver@home.eunjea.org)
 

이제 인증키를 복사해둔 ssh서버에 접속하면 이 세션에서는 더 이상 암호를 묻지 않을 것이다.

서버가 지원한다면 되도록 SSH2 프로토콜을 사용하도록 한다. SSH2는 SSH1과는 전혀 다른 프로토콜이며 더욱 안전하고, 성능이 좋다.


ssh를 이용한 파일 복사

scp

위에서 인증키를 리모트 서버에 복사할때 사용한 scp에 대해서 알아보자
예를 들어, 복사하려는 파일명이 'dumb' 라고 하고 접속하려는 원격 서버의 주소는 www.foobar.com, 당신의 쉘 계정은 babo 라고 한다면
dumb 파일을 www.foobar.com 의 babo 계정 홈 디렉토리에 복사하기

[foo@home silver]$ scp dumb babo@www.foobar.com:.
 

www.foobar.com 의 babo 계정 홈 디렉토리에 있는 dumb 파일을 로컬로 복사하기

> scp babo@www.foobar.com:dumb .
 

만약 ~/.ssh/config 파일에 다음과 같이 www.foobar.com 의 계정을 설정해 놓았다면,

Host *fbc
HostName www.foobar.com
User babo
ForwardAgent yes
 

다음과 같이 더 간단하게 할수 있다.

> scp dumb fbc:.
 

또한 scp 는 -r 옵션도 가지고 있는데 이것은 디렉토리를 통채로 복사 할때 사용한다. 예를 들어 test/ 디렉토리안의 모든 파일과 하위 디렉토리를 서버 계정의 www 디렉토리 안에 복사 하려면 다음과 같이 한다.

> scp -r test/ babo@www.foobar.com::www/
 

sftp

sftp는 ssh하에서 전통적인 ftp 환경을 제공하며, 리모트상의 프로그램을 실행시킬수도 있다.

openSSH 클라이언트 패키지에는 sftp가 포함되어 있다.



ssh 터널링
ssh 터널링이란 ssh 접속을 다른 프로그램이 사용할수 있도록 port forwarding해주는 것을 말한다. 이 ssh 터널링을 이용해 암호화 접속을 사용하지 않는 네트워크 접속을 보다 안전하게 사용할수 있다.


POP

fetchmail을 사용하면 간단하게 ssh 터널안에서의 pop 메일 긁어오기를 구현할수 있다.

.fetchmailrc 설정예

poll localhost with protocol pop3 and port 11110:
    preconnect "ssh -C -f 계정@메일서버.com -L 11110:메일서버.com:110 sleep 5"
    password xxxxx
 

IMAP

ssh 터널링과 fetchmail을 사용해서 imap 서버로부터 메일을 가져오려면, 다음과 같은 .fetchmailrc를 만들어 사용하면 된다.

poll 메일서버.com with proto imap:
    plugin "ssh %h /usr/sbin/imapd" auth ssh;
    user babo is babo here
 
SMTP

역시 같은 문서에서 SSH 접속을 이용한 SMTP 사용법을 제시했는데 방법은 다음과 같이 간단하다.

 ssh -C -l loginid mailserver -L2525:mailserver:25
 

후에 메일 클라이언트를 localhost port 2525 를 통해 메일을 보내도록 하면 된다. 예를 들어 pine을 사용한다면, .pinerc의 smtp-server=localhost:2525 와 같이 해주면 되겠다.

ssh 윈도우 클라이언트인 SecureCRT를 사용해도 가능한데 Session Option -> Connection -> Hostname -> Advanced 탭을 선택해서, 같은 요령으로 사용할 로컬 포트와 원격 호스트 이름, 포워딩할 원격 포트를 선택한다. ssh 접속 후에는 OE의 경우 SMTP 서버를 127.0.0.1 로 지정하고 사용할 포트만 위에서 선택한 로컬 포트로 지정하면 된다. POP 포트도 같은 방법으로 사용 가능 하다.

SSH를 이용한 SMTP는 몇가지 장점을 가지는데 네트워크 트래픽의 감소와 계정 사용자만이 SMTP 서버를 사용할수 있으므로 함부로 릴레이를 열어놓지 않아도 된다는데 의미가 있겠다.

Webmin

Webmin는 웹상에서 브라우저로 서버 관리를 하는 툴이며, 당연히 보안에 민감하다.

webmin은 일반적으로 10000 포트를 사용하므로 다음과 같이 ssh 접속을 연다.

ssh -f -l [원격 유저] [원격 서버] -L 1234:[원격 서버]:10000 tail -f /etc/motd
 

이제 브라우저에서 http://localhost:1234 로 접속할수 있다.

X

리모트 서버상의 X 어플리케이션들을 실행하고자 한다면 계정 홈 디렉토리의 ~/.ssh/environment 파일을 만들고 다음과 같은 내용을 넣어준다.

XAUTHORITY=/home/계정 이름/.Xauthority
 

이제 로그아웃한후에 ssh를 다음과 같이 실행해본다. (계정 이름이 silver이고 서버는 gate.eunjea.org 라고 한다면)

ssh -f -X -l silver gate.eunjea.org xterm
 

이제 xterm 이 로컬의 X에서 실행될 것이다. 다른 X 어플리케이션들도 이와 같이 실행시킬수 있다.




설정 파일
ssh 설정 파일은 ~/.ssh/config 파일 이다. 또는 전체 유저의 설정파일은 /etc/ssh/ssh_config 로 설정할수 있다.

다음은 내가 사용하는 설정 파일의 일부분이다. Host 지시자를 사용하여 접속할 서버마다 다른 옵션을 사용할수 있다.

# *.eunjea.org 도메인을 가진 서버에 접속할때는 SSH2 프로토콜을 사용한다.
Host *.eunjea.org
Protocol 2

# koru.org 에 접속할때는 SSH2 와 압축 옵션을 사용한다.
Host koru.org
Protocol 2
Compression yes
CompressionLevel 9

# kldp.org에 접속할때는 SSH1 프로토콜을 사용하고
# Cipher는 blowfish, 압축을 켠다.
Host kldp.org
Protocol 1
Cipher blowfish
Compression yes
 

그외 중요한 옵션으로는 CheckHostIP 가 있는데 이것은 접속할때 마다 리모트 서버의 IP 주소를 known_hosts 파일과 대조해본다. 이것은 DNS spoofing에 의해 호스트키의 변경을 알수 있는 옵션이다. 디폴트는 yes이다

출처 : http://qdata.co.kr/bo/bbs/board.php?bo_table=ltip&wr_id=165&page=9

댓글목록

등록된 댓글이 없습니다.

1,139 (21/23P)

Search

Copyright © Cmd 명령어 18.223.213.76