SSH Tutorial on Linux

22
SSH Tutorial on Linux 발췌: http://support.suso.com/supki/SSH_Tutorial_for_Linux 문서는 Linux OS 어와 OpenSSH 사용하는 다른 OS 에서 SSH 클라이언트에 대해 설명하고 있다. 만일 Windows 사용하다면 SSH Tutorial for Windows 읽어 보길 바란다. Mac OS X 기타 Unix 시스템을 사용한다면 그리고 OpenSSH 설치 되어 있다면 참고 자료가 있다. 2010 Translated by Jack Min of ACTScom 2010-10-28

Transcript of SSH Tutorial on Linux

Page 1: SSH Tutorial on Linux

SSH Tutorial on

Linux 발췌: http://support.suso.com/supki/SSH_Tutorial_for_Linux

이 문서는 Linux OS어와 OpenSSH를 사용하는 다른 OS에서 SSH

클라이언트에 대해 설명하고 있다. 만일 Windows사용하다면 SSH

Tutorial for Windows를 읽어 보길 바란다. 혹 Mac OS X나 기타 Unix

시스템을 사용한다면 그리고 OpenSSH가 설치 되어 있다면 참고

자료가 될 수 있다.

2010

Translated by Jack Min

of ACTScom

2010-10-28

Page 2: SSH Tutorial on Linux

이 문서는 인터넷에서 SSH에 설명하는 최고 교육 자료 중에 하나이다. 이 문서는 1991년에 처음

만들어 졌으며 2006년에 새롭고 보다 정확한 정보로 수정되었다. 2008년 10월가지 473,600 명에

게 읽혀 졌으면 지금까지 SSH 교육자료와 Linux SSH에 대해 구글 검색에서 최고로 보여진다.

Page 3: SSH Tutorial on Linux

목차

1. SSH란 ................................................................................................................................................................. 4

2. 시작하기 ............................................................................................................................................................. 5

3. Key 생성하기 ................................................................................................................................................... 7

4. SSH 프로그램 사용하기 ........................................................................................................................... 10

5. X11 세션 Forwarding ............................................................................................................................... 12

6. TCP 포트 Forwarding ............................................................................................................................... 13

7. SOCKS5 프락싱 ............................................................................................................................................ 15

8. SSH를 통해 명령어 실행하기 .............................................................................................................. 16

9. SCP 사용하기 ................................................................................................................................................ 18

10. SSH 세션 유지하기 ................................................................................................................................. 19

11. SSH 세션 끝내기 ..................................................................................................................................... 20

12. 참고자료 ....................................................................................................................................................... 21

13. Credits ........................................................................................................................................................... 22

Page 4: SSH Tutorial on Linux

암호화 되지 않은 Telnet 세션

암호화된 ssh 세션

1. SSH란 Linux/Unix 시스템에 외부에서 Shell(Command Line) 에 접속하는 두 가지 방법이 있다. 오래된 방

법 중의 하나는 텔넷 프로그램을 이용하는 것이고 대부분 지원하는 OS 시스템에 이용된다. Shell

계정을 통해 접속하는 방법은 텔넷을 통해 보내거나 받을 때 위험을 노출되어 있고 Local

Network과 연결된 Network에 쉽게 보여진다. 그래서 중간에 있는 “Sniff”를 사용할 수 있는 어느

누구나 Username, Password, 읽고 있는 Email, 실행하는 Command 를 볼 수 있다. 그런 이유로

외부 시스템에 접속하는 텔넷 프로그램은 보다 복잡할 필요가 있다.

SSH 는 Secure Shell 이고 다른 컴퓨터를 외부에서 접

속할 때 최고의 보안을 제공하기 위해 디자인되고 만들

어 졌다. 세션을 암호할 뿐만 아니라 보다 나은 인증

절차를 제공한다. 보안 파일을 전송할 뿐만 아니라 X

세션을 포워딩, 포트 포워딩은 다른 프로토콜의 보안상

태를 올릴 수 있다. 다양한 형태의 512부터 32768만큼

높은 암호화 범위를 사용하거나 AES(Advanced

Encryption Scheme), Triple DES, Blowfish, CAST128 이나

Arcfour같은 암호를 사용한다. 물론 더 높은 비트는

Key를 만들거나 사용하기 위한 더 많은 시간이 필요하면 연결 중에 더 긴 데이터를 만들 것이다.

왼쪽에 두 그림은 텔넷 세션에서 Ethereal(WireShark)나

Sniffit같은 프로그램을 사용했을 때 어떻게 보여지는가

를 나타낸다. 이것은 너무 쉬운 것이다. 그래서 네트웍

의 어떤 사람이 비밀번호나 다른 정보를 훔쳐갈 수 있

다. 첫 번째 그림은 사용자 jsmith의 텔넷 접속을 통하

여 외부 서버에 접속하는 로그이다. 그는 jsmith 사용자

명과 비밀번호 C0lts06를 입력한다. 이것은 그가 상용하

고 있는 같은 네트웍을 사용하는 다른 사람에게 보여진

다.

두 번째 그림은 어떻게 SSH같은 암호 접속된 상태에서 데이터가 네트웍 상에서 암호화가 되는

지 보여주고 session-negotiated Key 를 가지고 있지 않은 사람에게는 읽혀질 수 없다. 이것은 데

이터를 뒤섞을 수 있는 방법이다. 서버는 여전히 정보를 읽을 수 있다. 단지 클라이언트와 암호화

세션을 이뤄진 이후이다.

Page 5: SSH Tutorial on Linux

2. 시작하기 이 자료는 SSH를 인스톨하는 방법을 설명하지는 않을 것이다. 하지만 다양한 작업들에 대해 어떻

게 사용하는 지에 대해 설명할 것이다. OpenSSH 의 설치에 대해서는 Linux 배포 문서를 참고해

야 할 것이다.

만일 2002년 이후에 릴리즈 된 버전을 사용하고 있다면 이미 OpenSSH가 설치 되어져 있다. 리

눅스에 사용하려 하는 SSH version이 OpenSSH라 불려진다. 지금 작성하는 지금까지(2009년 10월)

의 버전은 5.3이다. 하지만 3.6 버전 이후의 버전도 있을 수 있다. 만일 3.9 버전 이하를 사용하고

있다면 업그레이드 할 것을 권장한다.

OpenSSH는 http://www.openssh.org/로부터 얻을 수 있다.

.ssh를 유용하게 하기 위해서는 원격장치에 suso.org 에 있는 계정과 같이 Shell 계정이 필요하다.

첫 번째 해야 할 일은 원격 장치에 접속하는 것이다. ‘ssh hostname’을 실행하는 것으로 local 장

치에서 해볼 수 있다. 입력되는 hostname은 접속하길 원하는 원격 장치의 이름이다. 기본적으로

ssh는 local 장치에서 사용하는 같은 사용자명으로 인증하는 것으로 가정할 것이다. 이것을 무시

하고 다른 사용자를 사용하기 위해서는 간단하게 입력 구문에 remoteusername@hostname 으로

입력한다. 다음의 예와 같다.

ssh [email protected]

첫 번째는 known_hosts로 등록할 것인지 요구한다. 그럴 경우, yes라 답한다.

The authenticity of host 'arvo.suso.org (216.9.132.134)' can't be established.

RSA key fingerprint is 53:b4:ad:c8:51:17:99:4b:c9:08:ac:c1:b6:05:71:9b.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'arvo.suso.org' (RSA) to the list of known hosts.

이것은 SSH의 중요한 특징(유효한 호스트) 중에 하나이기 때문에 이런 질문에 관심을 갖는 것이

중요하다. 간단히 입력하게 되면 ssh는 호스트와 연결을 확인할 것이고 연결된 상태를 인지할 것

이다. 만일 어떤 사람이 SSH 세션을 sniff하기 위해 그들의 시스템을 통해서 로깅 한다면 아래와

같은 경고를 띄울 것이다.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@

@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@

Page 6: SSH Tutorial on Linux

The RSA host key for arvo.suso.org has changed,

and the key for the according IP address 216.9.137.122

is unchanged. This could either mean that

DNS SPOOFING is happening or the IP address for the host

and its host key have changed at the same time.

Offending key for IP in /home/suso/.ssh/known_hosts:10

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@

@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that the RSA host key has just been changed.

The fingerprint for the RSA key sent by the remote host is

96:92:62:15:90:ec:40:12:47:08:00:b8:f8:4b:df:5b.

Please contact your system administrator.

Add correct host key in /home/suso/.ssh/known_hosts to get rid of this message.

Offending key in /home/suso/.ssh/known_hosts:53

RSA host key for arvo.suso.org has changed and you have requested strict

checking.

Host key verification failed

만일 이런 경고 메시지가 나왔을 경우는 동작을 멈추고 원격 서버의 호스트 키가 변경된 이유가

있는지 확인해야 한다(SSH가 업그레이드 되거나 서버가 업그레이드 될 경우). 만일 변경된 이유

가 좋지 않다면 이 상황에 대해 관리자와 연락이 될 때까지 장비에 연결하려 해서는 안 된다. 만

일 연결하려고 하는 시스템을 가지고 있다면 시스템이 해킹 되었는지 조사해 보야 한다(리눅스는

해킹될 수 있다). 혹은 컴퓨터가 DSL에 연결되어 동적 IP를 사용하면 변경될 수 있다. 집의 장치

에 DSL 연결을 하려고 할 때 한번 이 메시지를 받는 적이 있다. 이것은 내가 SSH나 집 컴퓨터의

어떤 것을 업그레이드를 하거나 하지 않았기 때문에 이상하다고 생각했다. 그래서 캐쉬된 Key를

덮어 쓰는 것을 하지 않기로 결정했다. 이후 내 동적 IP 주소가 변경되었다는 것을 알았고, 우연

히 OpenSSH이 동작하는 다른 리눅스 시스템이 나의 예전 IP 주소를 가지고 있다는 것을 알았기

때문이다.

Yes 라고 응답한 후에 원격 시스템의 비밀번호를 요구할 것이다. 만일 사용자 이름이 존재하고

원격 비밀번호를 정확히 입력했다면 시스템은 접속을 허가할 것이다. 만일 그렇지 않다면 다시

시도해 보고 여전히 실패한다면 관리자에게 시스템 계정을 가지고 있는지 사용자 이름과 비밀번

호가 올바른지 확인해 봐야 한다.

Page 7: SSH Tutorial on Linux

3. Key 생성하기 지금까지 연결하는 데에 시간을 많이 보냈기 때문에 이제 거기까지 하기로 하자. 일단 컴퓨터에

‘ssh-keygen –t dsa’라 쳐보자.

ssh-keygen -t dsa

다음과 같이 출력될 것이다.

Generating public/private dsa key pair.

Enter file in which to save the key (/home/localuser/.ssh/id_dsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/localuser/.ssh/id_dsa.

Your public key has been saved in /home/localuser/.ssh/id_dsa.pub.

The key fingerprint is:

93:58:20:56:72:d7:bd:14:86:9f:42:aa:82:3d:f8:e5 [email protected]

keyfile의 위치에 대해 물어볼 것이다. 기본 위치에 이전에 만들어 졌음에도 불구하고 ‘enter’

key를 누름으로써 기본 위치를 선택할 것이다.

ssh [email protected]

다음은 passphrase에 대해 물어 볼 것이고 여기에 확인을 요청할 것이다. Passphrase를 사용해야

하는 것에 대한 생각은 password와는 다르다. 정상적인 password는 유일하고, 추측할 수 없는 것

으로 선택 되어야 하지만 그렇게 하면 문장처럼 너무 많이 길어진다. 여기에 내가 이전에 사용했

던 passphrase의 기본 예제가 있다.

The right thing changes from state to state

the purpose of life is to give it purpose

They're not going to guess this passphrase!

The RIAA can just suck my big ass

It is never a good day at Teletron

몇몇 내가 이전에 사용했던 passphrase는 60개 정도의 많은 구두점과 숫자를 포함한 문장으로 이

Page 8: SSH Tutorial on Linux

루어져 있다. 이것은 passphrase를 더 힘들게 만든다. 보다 많이 보안되어 질 수 있는 passphrase

에 대한 생각을 준다면, 한 구문 내에 2000개를 사용할 수 있다고 생각하고 수를 좁혀보면, 2000

개 단어에서 5단어를 사용했던 적이 있다면 그것은 32,000,000,000,000,000개의 다른 조합을 만들

어 낼 수 있음을 의미한다. 거기에 대문자 소문자를 사용하고 숫자와 구두점(약 94개의 문자)를

사용하는 8자를 사용하는password라 하면 6,095,689,385,410,816 개로 된다. 이것은 5자의

password 보다 5.25배의 가지수가 있다. 실제로 대부분의 사람들은 10,000개 혹은 그것보다 많은

수에서 단어를 선택한다. 5단어를 사용하는 구분은 8자를 사용하는 password보다 복잡도가

16,405배이다. 그래서 평균적으로 이전에 사용되었던 어떤 password보다 대단히 알아내기가 어렵

다. 재미있는 것은 성인 단어장(8000개 단어 혹은 이상)을 아는 사람의 8개 단어의 조합은 8자의

password를 스스로 조합하는 것과 같거나 약 16,777,216,000,000,000,000,000,000,000,000의 조합

과 같다.

Passphrase를 위해 어떤 유명한 인용문이나 인용구를 사용하지 말아야 한다. 그것들은 쉽게 다른

사람들이나 Crack 프로그램에 의해 예상될 수 있다.

keyfile을 만드는 것은 시스템 password를 사용하지 않고 보안을 높이기 위해서이다. 하나의 key

를 생성할 때 실제 두 개의 파일이 생성된다. 하나는 private키이고 하나는 public 키이다. public

키는 private키와 다르다. private 키는 항상 자신의 컴퓨터에 있어야 하고 잃어 버리지 않고 나쁜

쪽으로 이용되지 않게 조심해야 한다. public 키는 연결을 원하는 시스템의 .ssh/authorized_keys

파일 안에 둘 수 있다. public키는 어떤 사람에 의해서나 수학적으로 private키를 만들어 수 없기

때문에 보여지는 것이 안전하다. 이것은 마치 38,147,918,357이란 수를 주고 그 수를 만들어 내기

위한 숫자나 숫자들을 찾아내라고 요구하는 것과 같다. 그것은 거의 극한의 가능성이다.

ssh를 통해 authorized_keys 파일에 있는 public 키를 가진 호스트에 연결할 때마다 그 컴퓨터에

접속하는 것을 허용하기 위해 private 키와 public 키를 사용하는 인증 방식을 사용할 것이다. 이

때 passphrase를 요구할 것이다. 하지만 이것은 local 컴퓨터에 대해 passphrase를 묻는 것뿐이지

원격에 위치한 ssh server에 대한 것은 아니다. 이것은 단지 사용하는 private 키에 따라서 인증을

요구하는 것이다. 시스템 password를 하는 대신에 key를 이용한 인증 방식을 사용하는 것은 많이

효율적이지 않을 수도 있다. 하지만 거기에는 X windows에 자동으로 접속하는 것 같은 나중에 설

명할 다른 이득들이 있다.

좀더 나아가 public 키를 원격시스템의 ~/.ssh/id_dsa.pub에 복사해 보자.

scp ~/.ssh/id_dsa.pub [email protected]:.ssh/authorized_keys

system password를 요구할 것이고 인증 후에 파일을 전송할 수 있을 것이다. 첫 번째로 원격 시

스템에 .ssh 디렉토리가 먼저 생성해야 한다. 그런데 scp는 ssh를 사용하는 파일 전송 프로그램이

다. 나중에 이에 대해 얘기할 것이다.

ssh가 원격시스템에 연결되면 password 대신에 passphrase를 요구해야 한다. 그렇지 않으면 원격

시스템의 권한들과 authorized_keys 파일과 .ssh 디렉토리에 각각 개별적으로 설정할 수 있다. 원

Page 9: SSH Tutorial on Linux

격서버에 아래와 같은 명령어를 사용할 수 있다.

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

간단하게 버퍼로 copy한 다음 원격 authorized_keys 파일에 public 키를 넣을 수 있다. 원격시스

템에 접근해서 vi나 emacs 혹은 nano를 통해 직접 파일에 붙일 수 있다. public 키를 간단히 볼

수 있는 ‘cat’ 프로그램을 추천하고 싶다. 이것은 한 줄을 여러 줄로 분리 할 것이다.

cat ~/.ssh/id_dsa.pub

Page 10: SSH Tutorial on Linux

4. SSH 프로그램 사용하기 key 방식의 인증 을 사용하는 진정한 유용성은 ssh-agent 프로그램을 사용하는 데 있다. 일반적

으로 ssh-agent 프로그램은 X windows가 시작하기 전에 시작하고 이후 X windows가 시작한다.

모든 X windows 프로그램은 ssh-agent로 되돌아가 연결을 전달한다. 이것은 Gnome 터미널,

aterm, xterm 등등을 모두 포함한다. 이것은 ssh-agent를 통해 X windows가 시작한 후에 실행되

는 것을 의미한다. ssh-add 프로그램을 passphrase를 agent에서 추가할 수 있고, agent는

passphrase를 사용할 필요가 있을 때 마다 자동으로 이 인증 정보를 통과 시켜 줄 것이다.

ssh [email protected]

그래서 실행한 다음에는 passphrase나 password를 입력하는 것 없이 자동으로 로그인이 될 것이

다. 대부분의 배포자들은 gdm(그래픽 로그인) 같은 세션 manager를 통해서 X windows를 로그인

할 때 자동으로 ssh-agent를 시작할 것이다. 지금 이 글을 쓰고 있는 순간까지 알려진 ssh-agent

를 사용하는 배포자는 아래와 같다.

Debian

Fedora

Gentoo

SuSE

Ubuntu

약 2002년 이전의 배포자는 아직 시작하지 않았다.

여기 등록되어 있지 않은 공급자라도 걱정하지 않아도 된다. 아래 명령어로 이전에 실행 되고 있

는지 확인할 수 있다.

ps auxw

만일 등록된 ssh-agent가 있다면, 단지 사용하면 된다. 만일 그렇지 않다면 OpenSSH문서를 참조

하고 ssh-agent를 실행해야 한다.

ssh-agent가 실행되고 있는 것을 확인했다면 ssh-add 명령어를 통해서 ssh 키를 더할 수 있다.

ssh-add

만일 프로그램이 위에 생성된 DSA 키를 찾는 다면 passphrase를 물을 것이다. 그러면 ssh-agent

에 id가 더해졌다고 알려 줘야 한다.

Page 11: SSH Tutorial on Linux

Identity added: /home/username/.ssh/id_dsa

(/home/username/.ssh/id_dsa)

이제 원격 시스템에 다시 로그인 할 수 있다. 그때 어떤 password나 passphrase 없이 로그인 되

는 것을 알 수 있을 것이다.

보다 쉽게 passphrase를 추가하는 방법은 ssh-add 프로그램을 세션 시작 프로그램에 추가할 수

있고 desktop을 로그인 할 때마다 passphrase을 X windows 상에서 물어올 것이다. 또한 gtk2-

askpass 프로그램이나 혹은 x11-askpass도 설치해야 한다. 이 프로그램들은 실제 password를 요

구하는 프로그램이다. ssh-add는 단지 터미널이 아닐지라도 실행된다. 아래는 시작 프로그램의

ssh-add를 더한 Gnome Session Configuration 대화창의 screenshot이다.

Page 12: SSH Tutorial on Linux

5. X11 세션 Forwarding X windows의 덜 알려진 특징중의 하나는 네트웍 투명성이다. 이것은 네트웍 연결을 통해 window

와 비트맵 정보를 전송할 수 있도록 디자인 되어 있다. 그래서 간단하게 원격 시스템에 로그인

할 수 있고 Gnumeric 프로그램이나 Gimp 혹은 FireFox 같은 X windows 프로그램을 실행시킬 수

있다. 이 프로그램들은 원격 컴퓨터에서 실행될 것이다. 하지만 그래픽 출력은 단말에서 보여질

것이다.

이것을 실행하기 위해서는 X windows 어플리케이션인 설치된 X windows 원격컴퓨터의 계정이

필요할 것이다. suso.org 서버는 그러한 프로그램을 가지고 있지 않기 때문에 다른 workstation

이나 다른 서버가 필요할 것이다. 이것을 해내기 위한 주요 요소는 –X 옵션을 사용하는 것이다.

그것은 “SSH 연결을 통해 X 연결을 forward 한다는 것”을 의미한다. 이 것은 터널링 형태이다.

ssh -X [email protected]

만일 동작하지 않는 다면 원격서버에 X11forwarding을 할 수 있도록 원격 컴퓨터에 SSH

Daemon을 설치해야 할 수도 있다. 그 컴퓨터의 /etc/ssh/sshd_config 파일의 아래 라인을 확인해

봐야 할 수도 있다.

X11Forwarding yes

X11DisplayOffset 10

X11UseLocalhost yes

몇몇 X windows의 새로운 프로그램이나 버전에서 Trusted X11 Forwarding 대신 –Y 옵션을 사용

할 필요가 있을 수도 있다. 만일 Gimp 에 하나와 같은 아래 에러가 발생했다면 이 옵션을 사용

해 봐야 한다.

The program 'gimp-2.2' received an X Window System error.

This probably reflects a bug in the program.

The error was 'BadWindow (invalid Window parameter)'.

(Details: serial 154 error_code 3 request_code 38 minor_code 0)

(Note to programmers: normally, X errors are reported asynchronously;

that is, you will receive the error a while after causing it.

To debug your program, run it with the --sync command line

option to change this behavior. You can then get a meaningful

backtrace from your debugger if you break on the gdk_x_error()

function.)

Page 13: SSH Tutorial on Linux

6. TCP 포트 Forwarding X11 세션 forwarding 과 같이 SSH는 형성된 SSH 세션을 통해 다른 TCP 어플리케이션의 수준의

포트 forward와 backward를 전달할 수 있다.

예를 들어, 집의 시스템을 arvo.suso.org에 port forwarding을 설치 할 수 있고 이렇게 하면 로컬

호스트 3306 포트와 원격시스템 mysql.sudo.org 3306포트와 연결시킬 수 있다. 포트 3306은

MySQL 서버가 감시하는 포트이고 이는 일반적인 Host 검사를 통과 시키고 MySQL 서버는 suso

계정으로 연결되어 있을 때에 로컬컴퓨터에서 MySQL GUI 프로그램을 실행시킬 수 있도록 한다.

다음이 이것을 하기 위한 명령어이다.

ssh -L 3306:mysql.suso.org:3306 [email protected]

-L (로컬 호스트를 의미) 다음과 같은 입력 값을 가질 수 있다.

<로컬 포트>:<연결할 호스트>:<연결할 포트>

그래서 어떤 호스트와 포트를 연결할 것인지 지정하는 것은 SSH 연결의 다른 쪽으로 진행할 수

있을 것이다. <로컬 포트> 에 연결할 때 SSH 연결을 통해 데이터를 보내고 <연결할 호스트>:<연

결할 포트> 에 연결한다. <연결할 호스트>의 관점에서 보면 이것은 마치 Login 하는 SSH 서버로

부터 들어온 연결이다. 마치 위의 arvo.suso.org의 경우와 같다.

이것은 VPN을 통한 원격 네트워크에 연결하는 것과 흡사하다.

잠시 네트워크 Tunnel을 통해 연결할 수 있는 유효한 연결을 생각해 보자.

또 다른 유효한 것은 로컬 연결이 SPAM 으로 분류되어 집에서 떨어진 곳에 있고 Home ISP를 통

해 메일을 보낼 수 없을 때이다. 마치 Thunderbird 가 메일을 보내기 위해 로컬의 8025 포트를

연결할 때와 같이 ISP에 연결되어 있는 로컬 SSH 서버에 SSH 터널을 만들 수 있다.

ssh -L 8025:smtp.homeisp.net:25 [email protected]

여기서 루트 사용자가 아닌 사용자들은 일반적으로 1024 보다 낮은 포트에 대해서는 감시하는

권한이 없다. 그래서 25번 포트는 동작하지 않을 수 있다. 때문에 8025 포트를 사용한다. 이것은

문제가 되지 않으며 Email Client가 연결하는 한 어떤 포트도 사용할 수 있다.

또한 전송 방향도 전환할 수 있고, 전환된 포트로 forward도 만들 수 있다. 이것은 원격으로 시스

템이 뒤로 들어오는 것을 허락하기 위한 연결을 원할 때 유효하다. 예를 들어 Reverse 22번 포트

(SSH) 터널을 만들고 네트워크로부터 떨어져 있을 때 Firewall 뒤로 SSH를 통해 시스템에 접근할

수 있다.

ssh -R 8022:localhost:22 [email protected]

Page 14: SSH Tutorial on Linux

이것은 집의 시스템에 연결하고 8022 포트를 감시하는 것을 시작하게 할 것이다. 일단 집으로 돌

아온 다음에는 아래의 명령어를 사용하여 연결을 되돌릴 것이다.

ssh -p 8022 username@localhost

터널링을 시작했던 시스템의 올바른 사용자 이름을 사용하는 것을 기억해야 한다. 이것은 혼동될

수 있다. localhost라 불렸던 호스트에 연결하고 있기 때문에 잊지 말아야 한다. 그렇지 않으면 다

른 SSH 서버에 연결하려 할 것이다 그러면 다음에 localhost에 연결할 때 localhost에 다른 호스

트일 수 있다. 그러면 localhost라인을 지우기 위해서 .ssh/known_hosts 파일을 수정할 필요가 있

다. 맹목적으로 실행하기 전에 SSH에 대해 정말 많은 것을 알아야 한다.

마지막 연습으로서 아래 루트로써 연결을 시작하는 것으로 reverse port forward를 항상 열린 상

태로 놓을 수 있다.

while true ; do ssh -R 8022:localhost:22 [email protected] ; sleep 60 ; done

이 방법은 집 시스템을 reboot 시킨다면 reverse 터널은 60초 이후에 자동으로 재연결을 하려 할

것이다. 원격시스템에 설치 키와 ssh-agent를 제공했다.

Page 15: SSH Tutorial on Linux

7. SOCKS5 프락싱 이것이 모두이다. 그러나 결국 forward 원하는 주소를 명시하는 것 없이 어떻게 Tunneling 할 수

있는 지 알기를 원할 것이다.

이것은 –D SOCKS5 옵션을 통해 가능하다.

ssh -D 9999 [email protected]

SOCKS5 프로토콜을 지원하는 어떤 어플리케이션이던 (그리고 대부분의 대형 네트워크 프로그램

이 지원한다) SSH 를 통해서 네트워크 연결을 forward 할 수 있고 능동적으로 명시한 어떤 호스

와도 forward 할 수 있다. 그래서 Web Browser에 대해서는 URL 주소 창에 URL을 입력하면 SSH

터널을 통해 보내 질 수 있다. Firefox, Xchat, Gaim 그리고 많은 SOCKS5를 사용하는 것을 지원하

는 많은 다른 것들도 역시 가능하다. 이 설정은 보통 연결 설정에 preferences 항목에 있다.

기억하라 “Uncle Ben”인 벤자민 파커의 어록에서 위대한 힘은 위대한 책임으로부터 온다. 단지

firewall 들 주위를 다닐 수 있고 네크워크 트래픽을 보내기 위해 다른 호스트를 사용할 수 있기

때문이 아니라 이것은 몇몇 시스템 관리자는 알아차릴 수 없다는 것을 의미한다.

Page 16: SSH Tutorial on Linux

8. SSH를 통해 명령어 실행하기 가끔 연가하고 있는 호스트에 Bash같은 shell을 실행하기 원지 않을 때가 있다. 아마도 명령어를

실행하고 빠져 나가기를 원할 것이다. 이것은 간단히 ssh 연결 명령어 끝에 수행하길 원하는 명

령어를 넣기만 하면 된다.

ssh [email protected] ls -l /

아마 다음과 같이 출력될 것이다.

total 220

drwxr-xr-x 2 root root 4096 Nov 9 04:08 bin

drwxr-xr-x 3 root root 4096 Nov 11 09:29 boot

drwxr-xr-x 23 root root 122880 Nov 14 02:36 dev

drwxr-xr-x 68 root root 12288 Jan 10 04:03 etc

drwxr-xr-x 189 root root 4096 Jan 9 00:40 home

drwxr-xr-x 2 root root 4096 Mar 12 2004 initrd

drwxr-xr-x 9 root root 4096 Nov 9 04:07 lib

drwx------ 2 root root 16384 Sep 26 2004 lost+found

drwxr-xr-x 2 root root 4096 Apr 14 2004 misc

drwxr-xr-x 6 root root 4096 Nov 12 02:11 mnt

drwxr-xr-x 3 root root 4096 Oct 15 22:17 opt

dr-xr-xr-x 307 root root 0 Nov 14 02:36 proc

drwx------ 44 root root 8192 Jan 9 16:23 root

drwxr-xr-x 2 root root 8192 Nov 9 04:08 sbin

drwxr-xr-x 2 root root 4096 Mar 12 2004 selinux

drwxr-xr-x 9 root root 0 Nov 14 02:36 sys

drwxrwxrwt 20 root root 4096 Jan 10 06:46 tmp

drwxr-xr-x 17 root root 4096 Dec 7 2004 usr

drwxr-xr-x 26 root root 4096 Jan 10 2005 var

그런 다음 어째든 보통을 shell을 사용하여 진행할 수 있다.

또한 Client에 의한 어떤 명령어에 관계없이 특별한 명령어를 수행하기 위해 강제로 Login을 하려

하는 forced-command를 수행할 수 있다.

이것을 위해 강제로 수행하기를 원하는 명령어와 변수를 원격 호스트의 authorized_keys 파일에

넣을 수 있다.

command="/usr/bin/backup" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAvna.....

Key를 위한 명령어 line을 위한 내용을 시작하기 전에 변수를 넣어야 한다. 거기에는 특별한 host

Page 17: SSH Tutorial on Linux

로부터 허용되는 from=”” 같이 사용될 수 있는 변수들이 있다. 이런 변수 들은 commas에 의해

구분 되어 함께 입력 될 수 있다.

(이 공간은 의도적으로 빈칸으로 남겨 둔다)

Page 18: SSH Tutorial on Linux

9. SCP 사용하기 SCP는 호스트들과 암호화된 연결간에 파일을 전송하기 위해 SSH 프로토콜을 사용하는 프로그램

이다. 로컬 컴퓨터에서 원격 호스트로 파일을 보낼 수 있고, 혹은 그와 반대로 또는 원격 호스트

에서 또 다른 원격 호스트로 파일을 전송할 수 있다.

아래는 report.doc이란 파일을 로컬 컴퓨터에서 원격컴퓨터의 같은 이름으로 파일을 복사하는 기

본적인 명령어이다.

scp report.doc [email protected]:

목적지의 부족한 파일명을 어떻게 원래 파일의 이름을 유지하는지 유의한다. 이것은 원격 호스트

의 디렉토리에 경로가 포함된 원격 목적지인 경우도 마찬가지다.

서버로부터 파일을 복사하기 위해서는 from과 to를 바꾸기만 하면 된다.

scp [email protected]:report.doc report.doc

만일 원격 컴퓨터에 새로운 파일 명으로 하길 원한다면 간단하게 to 쪽 colon 뒤에 이름을 부여

하면 된다.

scp report.doc [email protected]:monday.doc

혹은 원격사용자를 명시한 home 디렉토리에 연관된 디렉토리에 파일 복사를 원한다면

scp report.doc [email protected]:reports/monday.doc

/. 로 시작하는 전체 경로를 사용할 수 있다.

원격장소에 하위 디렉토리까지 복사하기 위해서는 –r 옵션을 사용한다. 아래 명령어는 원격컴퓨터

의 에 사용자의 홈 디렉토리에 mail 이란 이름의 디렉토리를 복사하는 명령어이다.

scp -r mail [email protected]:

파일과 디렉토리의 timestamp를 보존하고자 하거나 가능하면 사용자 그룹, permission까지 보존

하고자 하면 –p 옵션을 사용한다.

scp -rp mail [email protected]:

Page 19: SSH Tutorial on Linux

10. SSH 세션 유지하기 가끔 SSH 세션을 올리거나 idle 상태로 유지하기 어려울 수 있다. 어떤 이유이던 연결은 비활성

화 상태에서 X분 이후에 끊어진다. 보통 15분 혹은 수분 동안 메모리 상에서 상태적인 연결을 유

지 하도록 조정되어 있는 인터넷과의 사이에 방어벽이 있을 경우 발생한다.

다행하게도 OpenSSH의 최신 버전에서는 이 문제가 수정되어 있다. 간단히 아래와 같이 입력한다.

Host *

Protocol 2

TCPKeepAlive yes

ServerAliveInterval 60

~/.ssh/config 파일 안에 있다.

위의 파일은 Client 쪽의 SSH Configuration에서 사용되어 질 수 있다. 보다 자세한 내용은

ssh_config의 주요 페이지를 보면 된다. ‘TCPKeepAlive yes’는 직관적으로 ssh Client는 서버가 여전

히 존재하는지 주기적으로 아주 작은 데이터를 보내야 한다고 말한다. ‘ServerAliveInternal 60’는

이 메시지를 60초 주기로 설정하는 것이다. 이런 방법은 많은 방어벽이 연결을 끊는 것 대신에

유지하게 한다.

Page 20: SSH Tutorial on Linux

11. SSH 세션 끝내기 모든 것들이 끝나게 된다. 그러면 SSH 세션을 끝내는 여러 가지 보편적인 방법이 있다.

exit

logout

(Ctrl-d)

마지막의 것은 실제 사용자가 ‘Ctrl’키와 동시에 ‘d’ 문자를 누르는 것이다. 이 모든 것들은 SSH 세

션을 서버 쪽에서 끝내는 방법이다. 보통 시스템을 로그 오프를 번갈아 하며 shell을 빠져나간다.

알지 못할 수도 있는 것은 SSH 세션을 닫는 다른 방법이 있는가 이다. 이것은 만일 시스템과 연

결이 끊어 지고 shell 세션을 끊는 방법이 없다면 유효하다. 예를 들어 시스템이 꺼지는 시점에

로그인을 하고 있다면 잠깐 발생할 수 있다. SSH는 순차적으로 빠져가는 명령어라인을 가지고 있

다. 이것은 연결을 끊고 새로운 port forward를 만들거나 현재의 것과 약간의 다른 기능들을 나열

하는데 사용되어 질 수 있다. 명령 프롬프트가 없을 때조차 연결을 끊기 위해서 리턴 키를 두번

누르고(좋은 방법으로), ‘~’를 누른다. Tilde 가 일정주기로 나타난다.

(RETURN) (RETURN) ~.

이것은 서버 쪽 대신에 클라이언트 쪽에서 SSH 연결을 끊을 것이다.

Happy SSH’ing!!!

Page 21: SSH Tutorial on Linux

12. 참고자료

아래 SSH에 대해 보다 많은 정보를 찾을 수 있는 주소가 있다.

• Mark's presentation notes from the January 2006 BLUG meeting

• OpenSSH Website

• The SSH FAQ

• Secure Shell article in Wikipedia

• The old non-wiki version of this tutorial (last modified 2007-08-04)

• The much older version of this tutorial (1999-02-21)

• Linked to by digg.com front page (2006-03-03) (823 diggs!)

Page 22: SSH Tutorial on Linux

13. Credits Original document, graphics and examples by Mark Krenz ([email protected])

Thank you to the following people for sending corrections:

Zake Stahl (Several corrections)

Christopher Mylonas (noticing that MySQL should be 3306, not 3066)

Tehiri Tehiri (Suggesting a clarification in the username and password prompt section)

Other people listed on the history page of this document.