출처 : 대전국제IT교육센터 정성재 강사
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
'Server&OS > Linux' 카테고리의 다른 글
[본문스크랩] 【PHP강좌】Zend Optimizer 4 설치 (아파치와 PHP4 Zen.. (0) | 2010.04.24 |
---|---|
[본문스크랩] [CentOS] DNS 네임서버 설정 (BIND 9) (0) | 2010.04.24 |
[본문스크랩] [제60강][리눅스 관리]로그분석 (0) | 2010.04.24 |
[본문스크랩] 1-3 리눅스 파일관련명령어(2) - cmp,cut (0) | 2010.04.24 |
[본문스크랩] 1-3 리눅스 파일관련명령어(1) - tar,gzip (0) | 2010.04.24 |