일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- game
- PC
- 대항해시대
- apm
- network
- Windows 10
- UNIX
- Backup(Restore)
- webhard
- calculator
- Crack(Serial Key)
- web
- OS(operating system)
- Linux
- SSH
- Command
- Network Info(Tool)
- H/W
- portable
- Disk Partition
- MS windows
- javascript
- script
- Update
- explorer
- LiveCD(USB)
- FTP
- Programming
- MS Windows PE
- program
- Today
- Total
<In Story>
SSH Tunneling 사용하기 // [MS Windows] [Program] [Linux] [SSH] [Network] 본문
SSH Tunneling 사용하기 // [MS Windows] [Program] [Linux] [SSH] [Network]
<In Story, Hi story, History> 2015. 5. 16. 09:541. ssh에 대하여
ssh는 Secure
shell의 약자로 원격 머신에 로긴하여 그 안에 있는 명령들을 실행하는 프로그램이다.
기본적으로 사용법은 telnet과 유사하지만,
telnet은 클라이언트와 서버간의 데이터전송시 일반텍스
트형태로 패킷을 전달하여 패킷의 내용을 유출당할 수 있지만, ssh는 패킷전송시
암호화시키므로 안
전하게 전송할 수 있다.
현재 ssh는 ssh2와 ssh1 두 가지 프로토콜이 있는데, ssh2는 ssh1을 개선한
것으로 호환은 되지만
기본적으로 호환성을 포함하고 있는 것이 아니다. ssh2서버 혼자서는 ssh1 연결을 관리할 수 없으므
로
ssh1 서버가 반드시 있어야 한다.
ssh1과 ssh2의 차이점을 기술적으로 보면 SSH2는 이중-암호화 RSA키 교환을 비롯하여 다양한
키-교
환 방법을 지원한다.
2. SSH설치하기
(1) 개요:
리눅스에서 사용하는 ssh는 두가지가 있다. 하나는 원 제작처인 www.ssh.com에서 제작한
것과
www.openssh.org가 제작한 것이 있다. 대부분의 배포판에서 openssh에서 제작한 것을
기본으로 지원하므로
openssh를 사용하도록 한다.
(2) 구성: SSH의 기본 구성은 SSH 서버와 SSH클라이언트로 구분된다. SSH로 접속을 하려면
SSH서버
설치되어 있어야 하며, 클라이언트에서도 SSH가 지원되는 프로그램을 이용하여 접속해야
한다.
(3) 설치: 현재 대부분의 배포판 리눅스에 Openssh가 기본으로 설치되어 있으므로 설치부분은 일단
생략하도록 한다.
3. OpenSSH를 이용하여 ssh서버 설정하기
(1)
서버설정하기
1) 설명: 서버관련 주 설정파일은 /etc/ssh/sshd_config 이다. 보통 기본 설정파일 그대로
사용해
도 상관없지만 그룹이나 사용자들을 제한하려면 몇가지 지시자를 건드려야 한다.
2)
환경설정(sshd_config)파일의 주요항목 분석
# $OpenBSD: sshd_config,v 1.34
2001/02/24 10:37:26 deraadt Exp $
# This sshd was compiled with
PATH=/usr/bin:/bin:/usr/sbin:/sbin
# This is the sshd server
system-wide configuration file. See sshd(8)
# for more
information.
Port 22 // ssh가 사용하는 포트를
지정
Protocol 2,1 // openssh는 프로토콜 버전을 원하는 대로 선택할 수 있다.
SSH는
//SSH1과 SSH2가 있는데 현재와 같이 설정하면 SSH1, SSH2
모두
//접속이 가능하다.
#ListenAddress
0.0.0.0 // sshd 데몬이 귀를 기울일 주소이다. 0.0.0.0은 모든 곳을 말한
#ListenAddress
:: //다.
HostKey /etc/ssh/ssh_host_key // SSH1의 호스트키
위치를 지정한다.
HostKey /etc/ssh/ssh_host_rsa_key // SSH2의 RSA암호화방식의 호스트키
위치를 지정한다.
HostKey /etc/ssh/ssh_host_dsa_key // SSH2의 DSA암호화방식의 호스트키
위치를 지정한다.
ServerKeyBits 768 // 서버 키의 비트수를 정의한다.
최소값은 512이고, 기본
//값은 768이다.
LoginGraceTime 600 // 유저가 로그인에 실패했을 경우 서버가 연결을 끊는
//시간이다. 값이 0이면 제한이 없다.
KeyRegenerationInterval 3600 // 서버의 키는 한번 접속이 이루어진 뒤에 자동적으로
//다시 만들어진다. 다시 만드는 목적은 나중에
호스트의
//세션에 있는 키를 캡처해서 암호를 해독하거나
훔친키를
//사용하지 못하도록 하기 위함이다. 값이 0이면 키는
다
//시 만들어지지 않는다 .기본값은
3600초이다.
PermitRootLogin yes // root 로그인 허용여부를 결정하는
것이다. yes, no, wi
//thout-password를
사용할 수 있다. 현재 yes는 직접
//root로 접속이
가능하다. 이것을 허용하지 않으려면 no
//나
without-password로 바꾼다.
#
# Don't read ~/.rhosts and ~/.shosts
files
IgnoreRhosts yes // .rhosts 파일을 무시할 것이냐는 설정이다.
기본값은
//.rhosts파일을 무시한다.
#
Uncomment if you don't trust ~/.ssh/known_hosts for
RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
StrictModes
yes // 로그인을 허용하기 전에 파일모드, 사용자
홈디렉토리
//소유권, 원격 호스트의 파일들을 SSH데몬이 체크할
수
//있도록 해주는 설정이다.
X11Forwarding yes // 원격에서 X11 포워딩을 허용하는 것이다. 이 옵션을
//yes로 설정하면 xhost보다 안전한 방법으로 원격에
있는
//X프로그램을 사용할 수 있다.
X11DisplayOffset 10 // X11 포워딩될 때 디스플레이 번호를 지정해준다.
PrintMotd yes // SSH로그인시에 /etc/motd파일의 내용을 프린트되도록
//설정한다.
KeepAlive
yes // 클라이언트의 접속이 끊어졌는지 체크를 위해 서버가
//일정시간 메시지를 전달한다.
#
Logging
SyslogFacility AUTHPRIV // syslog관련
facility코드이다.
LogLevel INFO // 로그레벨을 지정한다. 기본값은
INFO이며, 그 외의 값
//으로 QUIET(기록하지 않음),
FATAL(치명적인 오류),
//ERROR, VERBOSE,
DEBUGS 등이 있다.
#obsoletes QuietMode and FascistLogging
RhostsAuthentication no // rhost관련 인증허가여부를 지정한다.
#
#
For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
RhostsRSAAuthentication no // rhost나 /etc/hosts.equiv파일이 있으면 이것을
사용해
//인증을 한다. 이것은 보안상 좋지 않은 방법이므로
기본
//값은 no이다.
#
RSAAuthentication yes // RSA인증을 사용한다.
# To disable
tunneled clear text passwords, change to no here!
PasswordAuthentication
yes // 패스워드 인증을 허용한다. 이 옵션은 프로토콜 버전
1
//과 2 모두 적용된다.
PermitEmptyPasswords no // 패스워드 인증할 때 서버가 비어있는 패스워드를
인정
//하는 것이다. 기본값은 no이다.
#
Comment to enable s/key passwords or PAM interactive authentication
# NB.
Neither of these are compiled in by default. Please read the
# notes in
the sshd(8) manpage before enabling this on a PAM system.
ChallengeResponseAuthentication no
# To change Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#AFSTokenPassing no
#KerberosTicketCleanup no
# Kerberos TGT
Passing does only work with the AFS kaserver
#KerberosTgtPassing
yes
#CheckMail yes
#UseLogin no
#MaxStartups
10:30:60
#Banner /etc/issue.net
#ReverseMappingCheck yes
Subsystem sftp /usr/libexec/openssh/sftp-server
// sftp는 프로토콜 버전
2에서 사용되는 것으로 ssh와 같이 ftp의 보안을 강화하기 위해 사용되
//는 보안 ftp프로그램이다. sftp서버를 사용하기
위한 항목이다.
(2) 클라이언트 설정하기
1) 설명: 클라이언트의 전체유저 설정파일은
/etc/ssh/ssh_config로 설정할 수 있다. Host지시자
를 사용하여 접속할 서버마다 다른 옵션을 사용할
수 있다. SSH서버에 접속하는데 있어서
꼭 필요한 설정은 아니다.
2) 주요환경
설정파일(ssh_config) 분석
# $OpenBSD: ssh_config,v 1.9 2001/03/10
12:53:51 deraadt Exp $
# This is ssh client systemwide configuration
file. See ssh(1) for more
# information. This file provides defaults
for users, and the values can
# be changed in per-user configuration
files or on the command line.
# Configuration data is parsed as
follows: // 클라이언트 설정파일은 3가지 방법으로 설정
# 1. command line
options // command line options
# 2. user-specific
file // 유저별 설정파일 지정($HOME/.ssh/config)
# 3.
system-wide file // 시스템 전체 설정
파일(/etc/ssh/ssh_config)
# Any configuration value is only changed the
first time it is set.
# Thus, host-specific definitions should be at the
beginning of the
# configuration file, and defaults at the
end.
# Site-wide defaults for various options
# Host
* // 모든 호스트에 연결할 수 있다.
# ForwardAgent
no // 인증에이전트의 연결을 원격 호스트에 포워드할 수 있다.
# ForwardX11
no // X11 커넥션이 자동으로 된다. 매번 서버에 연결할 때
command
//line에서 -X옵션없이 기본적으로 X포워딩기능을 사용할 수
//있다.
# RhostsAuthentication
no
# RhostsRSAAuthentication yes
# RSAAuthentication
yes
# PasswordAuthentication yes
# FallBackToRsh no
# UseRsh no
# BatchMode no
# CheckHostIP yes
// 이 부분이 yes가 되어 있으면 접속할 때마다 리모트 서
//버의 IP주소를 know_hosts파일과 대조해본다. 이것은
//DNS Spoofing에 의해 호스트키의 변경을 알 수 있다.
# StrictHostKeyChecking
yes
# IdentityFile ~/.ssh/identity // 사용자의 RSA인증 identity를 읽는다. 기본적으로
사용
//자의 홈디렉토리에 $HOME/.ssh/identity에
저장되어 있
//다.
#
IdentityFile ~/.ssh/id_dsa // 사용자의 DSA인증 identity를 읽는다. 기본적으로
사용
//홈디렉토리의 $HOME/.ssh/id_dsa에
있다.
# IdentityFile ~/.ssh/id_rsa1
# IdentityFile
~/.ssh/id_rsa2
# Port 22
# Protocol 2,1
# Cipher
blowfish // 프로토콜 버전1에서 세션을 암호화하기 위한
암호알고리
//즘을 지정한다. blowfish, 3des를 지정할 수
있다.
# EscapeChar ~
Host *
ForwardX11
yes
Protocol 2,1
// 모든 호스트에 접속할 때 ssh2와 ssh1을 사용하며 X11
포워딩을 허가한다.
3) 사용예
ㄱ. Host *.mybestone.com
Protocol
1
=> mybestone.com 서버에 접속할 때는 ssh1 프로토콜을 사용한다.
ㄴ. Host
kldp.org
Protocol 2
Compression yes
CompressionLevel 9
=> kldp.org에 접속할 때는 ssh2와 압축 옵션을
사용한다.
4. 클라이언트에서 SSH 사용하기
(1) 리눅스클라이언트에서
서버로 접속하기
1) 설명: 리눅스에서 리눅스로 접속한다면 별도의 설정이나 프로그램의 설치없이 가능하다.
대부
분의 배포판은 openssh가 설치되어 있다. 윈도우에서 리눅스서버로 접속한다면
ssh클라이
언트를 설치해야 한다.
2) 리눅스 클라이언트에서 리눅스 서버로 접속하기
ㄱ.
접속하는 방법:
a. ssh 계정명@도메인명
b. ssh -l 계정 도메인명
ㄴ.
사용예
a. ssh posein@mybestone.com
b. ssh -l posein mybestone.com
ㄷ. 접속
[posein@www posein]$ ssh posein@mybestone.com
The authenticity of host 'mybestone.com (203.247.40.252)'
can't be established.
RSA key fingerprint is
89:41:93:58:5c:6d:bb:01:84:cb:3d:81:68:80:56:7b.
Are you sure you want
to continue connecting (yes/no)? yes
=> 처음 ssh로 해당 서버에 접속하면 나타나는
메시지로 접속할 서버의 호스트키가
~/.ssh/known_hosts(ssh2인 경우에는 known_hosts2)파일에
저장된다. yes로 대답한다.
Warning: Permanently added
'mybestone.com,203.247.40.252' (RSA) to the list of known
hosts.
posein@mybestone.com's password:
=> yes라고 대답하면 원래 서버의 패스워드를 물어오고, 패스워드를
입력하면 텔넷과 동일
한 작업을 할 수 있다.
(2) 윈도우에서 리눅스 서버로 접속하기
=>
윈도우에서 ssh를 사용하려면 ssh클라이언트 프로그램의 설치가 필요하다. 대표적인 프로그
램으로 SecureCRT가 있다.
상용으로 성능이 매우 우수하다. 관련사이트는 http://www.vandyke.
com이다.
5. 클라이언트에서 SSH서버로 접속하기
(1) 리눅스클라이언트에서 접속하기
[posein@neuro posein]$ ssh posein@mybestone.com
The authenticity of host 'mybestone.com (203.247.40.252)' can't
be established.
RSA key fingerprint is
a8:69:69:83:67:8b:50:27:41:ad:b8:e9:0d:b2:a8:88.
Are you sure you want to
continue connecting (yes/no)? yes // yes라고 입력
Warning: Permanently added
'mybestone.com,203.247.40.252' (RSA) to the list of .
posein@mybestone.com's password: // 해당 서버의 패스워드를 입력한다.
[posein@mybestone
posein]$
=> 접속되었다.
(2) 윈도우클라이언트에서 서버에 접속하기
1) 설명: 윈도우에서는 ssh를
이용하려면 별도의 전용 프로그램이 필요하다. http://www.openssh.
org/windows.html에 가면
윈도우용 클라이언트 프로그램의 목록을 확인할 수 있다. 그러
나 이 페이지에 있는 프로그램들은 대부분 ssh1만
지원한다. 여기서는 상용프로그램인
SecureCRT라는 프로그램으로 해본다.
2) 사용예
ㄱ.
SecureCRT를 선택한다.
ㄴ. 'Quick Connect'아이콘을 선택한다.
ㄷ. 'Quick
Connect'메뉴에서
Protocol ssh1
Hostname 접속하고자하는_도메인
Port 22
Username 사용자
를 입력하고 [connect]를 누른다.
ㄹ. 처음
접속하면 'New Host Key'라는 창이 뜨는데 [Accept & Save]를 클릭한다.
ㅁ. 'Enter
Password'라는 창이 나오면 사용자패스워드를 입력하고 [ok]를 누른다.
6. 인증키를
이용하여 SSH서버로 접속하기
(1) 개요: SSH서버로 접속할 때 일반적으로는 패스워드를 입력하여 접속하지만 인증키를
이용하여
접속할 수도 있다. 이 방법을 사용하면 로그인할 때마다 암호를 직접 입력하지 않고 생성
된 인증키로만 로그인할 수 있다.
(2) 사용예
1) 인증키를 만들기: ssh-keygen명령을 이용한다.
[posein@www posein]$ ssh-keygen -t rsa // RSA 암호화방법으로 인증키를
생성한다.
//Protocol 1 버전용 rsa1와
Protocol 2 버전용
//rsa, dsa 를
-t옵션을 사용하여 선택할 수 있다.
Generating public/private rsa key pair.
Enter file in which to save the key (/home/posein/.ssh/id_rsa):
=>
키가 저장될 곳과 파일명을 물어보는데 디폴트로 그냥 엔터를 넘어가도 된다. 넘어가면
다음과 같이 인증키 암호를 물어온다.
Created directory '/home/posein/.ssh'. // 관련 디렉토리를
생성한다.
Enter passphrase (empty for no passphrase):
=> 원하는 암호를
두번 입력한다.
Your identification has been saved in
/home/posein/.ssh/id_rsa.
Your public key has been saved in
/home/posein/.ssh/id_rsa.pub.
The key fingerprint is:
7b:60:56:eb:82:d2:43:40:48:a6:d0:8e:f4:7a:8c:f1 posein@xxx.com
=> ~/.ssh 디렉토리에 키가 생성된다. 참고로 인증키 생성시 인증키 암호를 입력하지
않으면
ssh 접속시 암호를 입력하지 않아도 접속할 수 있다. 그러나 보안상 위험하므로 피하도록
한다.
2) 퍼블릭 키 사용하기
ㄱ. 설명: 인증키를 생성하면 ~/.ssh 디렉토리안에 한쌍의 키(예를 들면 id_rsa
id_rsa.pub)가
생성되어 있다. 여기서 퍼블릭키인 id_rsa.pub을 접속할 리모트 서버에
~/.ssh디렉토
리에 authorized_keys라는 이름으로 복사한다.
ㄴ.
사용예
[posein@neuro posein]$ scp ~/.ssh/id_rsa.pub posein@mybestone.com:.ssh/authorized_keys
posein@mybestone.com's password: // 해당 서버의 패스워드를 입력한다.
id_rsa.pub 100% |*************************************************|
235 00:00
3) 접속하기
[posein@neuro posein]$ ssh posein@mybestone.com
=> 만약 인증키생성시에 패스워드를 입력하지 않으면 패스워드없이 즉시 로그인된다.
7. SSH관련 유틸리티
(1) scp(secure copy)
1) 설명: 원격지의 서버에 있는 파일을 ssh인증과 암호화된 기법을 이용하여 복사하거나 복사해
올 수 있도록
해준다. 전체적인 사용법은 복사명령인 cp와 유사하다.
2) 사용법
scp [option] 복사하고자하는_파일명
사용자아이디@원격지주소:파일명
=> 원격지주소의 파일을 복사하고자 할때는 반대로 지정하면 된다.
3)
option: 대체적으로 cp명령의 옵션과 유사하다.
-r : 특정디렉토리의 하위디렉토리까지 모두 복사해준다.
4)
사용예
ㄱ. scp a.txt posein@mybestone.com:test
=> 로컬에 있는 a.txt를 원격지서버에 test라는 이름으로 복사한다. 만약
test가 디렉토리
이며 test라는 디렉토리안에 a.txt라는 이름으로 복사된다.
ㄴ. scp
posein@mybestone.com:pds/sample.c .
=> 원격지서버의 posein이라는 사용자의 홈디렉토리에서
~/pds/sample.c를 현재 디렉토리에
복사한다.
5) 응용예: 개인 홈디렉토리의 .ssh/config
파일에 접속하고자하는 SSH서버에 관한 정보를 입력
하면 /etc/hosts파일의 역할처럼 간단히 입력만으로도
접속이 가능하다.
[posein@neuro posein]$ cat ~/.ssh/config
Host
*bestone // 접속하고자하는 서버의 간단한 이름을 지정한다.
HostName
www.mybestone.com // 실제 호스트네임을 기록한다.
User posein //
서버 계정을 적는다.
ForwardAgent yes // 인증대리인이 포워드가 되도록
지정한다.
[posein@neuro posein]$ scp passwd.txt bestone:.
=> 현재
디렉토리의 passwd.txt를 bestone(www.mybestone.com의 posein이라는 사용자의 홈디렉
토리)의
지정된 장소에 복사한다.
(2) sftp
1) 설명: 원격지 서버에 파일을 전송할 때 신뢰할 수 있는 암호화된 기법을 이용하여
전송하거나
전송받는다. 전체적인 사용법은 ftp명령과 유사하다.
2) 사용법
sftp
사용자아이디@원격지주소
3) 사용예
sftp posein@mybestone.com