참고 : http://comptb.cects.com/1264-install-configure-ssh-on-windows


OpenSSH 다운로드 : http://sshwindows.sourceforge.net/


1. OpenSSH 다운로드 및 설치

2. 포트 변경 시 OpenSSH\etc\sshd_config 을 열어 아래처럼 변경

 #Port 22 ==> Port 원하는포트


3. cmd 창

c:\OpenSSH>mkgroup -l >> ..\etc\group
c:\OpenSSH>mkpasswd -l -u 윈도우사용자아이디 >> ..\etc\passwd
c:\OpenSSH>net start opensshd


================================================================================================================
================================================================================================================

출처 : 대전국제IT교육센터 정성재 강사
         http://se.uzoogom.com/134

1. 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

 

+ Recent posts