### ssh ###
1. ssh ( Secure Shell )
: 로그인 쉘
이것은 압축 되고 암호화된 파일을 전송한다.
일반적으로 암호를 이용하여 접속하는 방법과 인증키를 이용하여 접속하는 방법이 있다.
2. 이것을 왜 사용해야 할까?
- 강력한 보안
- 프라이버시 보호. 모든 통신은 자동으로 그리고 투명하게 암호화된다.
- 안전한 X11 세션. 원격 서버에 DISPLAY 변수를 자동으로 설정하고 모든 X11 연결을 보안채널을 통해서 포워딩한다.
- TCP/IP 포트를 양 방향에서 다른 포트로 자유롭게 포워딩할수 있다.
- rlogin, rsh, rcp등을 완전히 대체한다.
- 선택적으로 데이터를 압축하여 느린 네트워크 상에서의 속도 향상
- 서버는 자신의 RSA 키를 가지며 일정 시간마다 자동으로 재 생성한다
3. ssh 종류
- www.ssh.com
- www.openssh.com
이곳에선 openssh 를 중심으로 설명하겠다.
4. ssh 서버
ssh 서버는 처음 설치 했을 때 특별히 설정 하지 않고도 사용 할 수 있다.
하지만 좀 더 세부적인 설정을 원한다면 sshd_config 를 이용하여 설정 할 수 있다.
[root@localhost ssh]# rpm -ql openssh-server-3.4p1-2
/etc/pam.d/sshd
/etc/rc.d/init.d/sshd
/etc/ssh
/etc/ssh/sshd_config
/usr/libexec/openssh/sftp-server
/usr/sbin/sshd
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
/var/empty/sshd
#vi /etc/ssh/sshd_config
# 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 <- 다른 데몬의 포트와 중복되어서는 안된다.
Protocol 2,1 <- 우선순위는 2
ListenAddress 0.0.0.0 <- 허용 IP, 모든 IP
#ListenAddress ::
HostKey /etc/ssh/ssh_host_key <- hostkey 파일의 절대경로, 암호해독할 key값
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
ServerKeyBits 768
LoginGraceTime 600 <- lonin 시간을 설정
KeyRegenerationInterval 3600
PermitRootLogin yes <- root login 허용
#
# Don't read ~/.rhosts and ~/.shosts files
IgnoreRhosts yes <- 원격접속 불허(rcp, rlogin..)
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding yes <- X-window용 프로그램 실행 가능
X11DisplayOffset 10
PrintMotd yes
KeepAlive yes
# Logging
SyslogFacility AUTHPRIV
LogLevel INFO
#obsoletes QuietMode and FascistLogging
RhostsAuthentication no
#
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
RhostsRSAAuthentication no
#
RSAAuthentication yes
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
PermitEmptyPasswords no <- Null password를 가진 계정은 접속 불허
# 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
#SkeyAuthentication no
KbdInteractiveAuthentication yes
# 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 <- ssh로 접속했을 때 메일 유무 확인
#UseLogin no
MaxStartups 10:30:60
#Banner /etc/issue.net
#ReverseMappingCheck yes
Subsystem sftp /usr/libexec/openssh/sftp-server
5. ssh 클라이언트
- 윈도우즈에서 ssh 클라이언트를 프로그램을 이용한 접속 방법
- 리눅스 등에서 접속하는 방법
$ssh -l mbaltop 192.168.0.221
$ssh mbaltop@mbaltop.org
- 인증키 사용하여 접속하는 방법
인증키를 사용하는 것은 로그인 할때마다 암호를 직접 입력하는 것보다 더욱 안전하며, 하나의 암호로 여러 ssh서버에 접속할수 있는등의 장점을 가진다.
- 인증키 만들기
인증키는 ssh-keygen로 만든다. 키를 만들때는 사용할 키의 형태를 지정해 주어야 하는데
원격 서버가 ssh 프로토콜 버전 2를 지원한다면 ``rsa'' 또는 ``dsa'', 프로토콜 1만을 지원한다면 ``rsa1''을 사용한다.
예를 들어 원격 서버가 ssh2를 지원하고, ``rsa'' 키를 만들고자 한다면,
키가 저장될 곳과 이름을 물어 오는데 디폴트로 그냥 엔터를 치고 넘어가면, 다음과 같이 인증키 암호를 물어온다. 원하는 암호를 두번 반복해서 입력해주면 키가 생성된다.
(엔터만 쳐도 된다)
[mbaltop@localhost mbaltop]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mbaltop/.ssh/id_rsa):
Created directory '/home/mbaltop/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/mbaltop/.ssh/id_rsa.
Your public key has been saved in /home/mbaltop/.ssh/id_rsa.pub.
The key fingerprint is:
1a:d0:cd:9e:b6:b8:4d:05:e6:d5:06:a9:5e:90:3e:64 mbaltop@localhost
인증키 생성시 인증키 암호를 공백으로 (passphrase 를 물어올때 그냥 엔터를 치면 된다) 만들수도 있는데, 이것은 ssh 접속시 암호를 입력하지 않아도 그냥 접속이 되므로 편리할수는 있으나,
만약 당신의 인증키가 어떠한 경로로든 유출되었을 경우를 생각 해보면 피해야 할 것이다.
그리고 ssh-add와 ssh-agent를 사용하여 접속시마다 인증키 암호를 입력하지 않는 방법이 있다.
- 공개 키 사용하기
이제 ~/.ssh/ 안에 한쌍의 키(id_rsa 와 id_rsa.pub)가 생성되어 있을것이다.
.pub 확장자가 붙은 것은 공개키로 이 파일을 접속할 리모트 서버들의 ~/.ssh/ 에 authorized_keys 라는 이름으로 복사해준다.
[mbaltop@localhost mbaltop]$ scp ~/.ssh/id_rsa.pub admin@192.168.0.221:.ssh/authorized_keys
[mbaltop@localhost mbaltop]$ ssh -l admin 192.168.0.221 (접속 성공.. ^^)
이제 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과는 전혀 다른 프로토콜이며 더욱 안전하고, 성능이 좋다.
--------------------------------------------------------------------------------
2.3. ssh를 이용한 파일 복사
scp
위에서 인증키를 리모트 서버에 복사할때 사용한 scp에 대해서 알아보자
예를 들어, 복사하려는 파일명이 'scp.txt' 라고 하고 접속하려는 원격 서버의 주소는 192.168.0.221, 당신의 쉘 계정은 admin 라고 한다면
dumb 파일을 192.168.0.221 의 admin 계정 홈 디렉토리에 복사하기
[mbaltop@localhost mbaltop]$ scp scp.txt admin 192.168.0.221:.
192.168.0.221 의 admin 계정 홈 디렉토리에 있는 test.scp 파일을 로컬로 복사하기
[mbaltop@localhost mbaltop]$ scp admin@192.168.0.221:test.scp .
admin@192.168.0.221's password:
test.scp 100% |*************************************************| 0 00:00
만약 ~/.ssh/config 파일에 다음과 같이 www.foobar.com 의 계정을 설정해 놓았다면,
[mbaltop@localhost mbaltop]$ cat .ssh/config
Host ttop
HostName 192.168.0.221
User admin
ForwardAgent yes
다음과 같이 더 간단하게 할수 있다.
[mbaltop@localhost mbaltop]$ scp test.scp1 ttop:.
admin@192.168.0.221's password:
test.scp1 100% |*************************************************| 0 00:00
또한 scp 는 -r 옵션도 가지고 있는데 이것은 디렉토리를 통채로 복사 할때 사용한다.
예를 들어 test/ 디렉토리안의 모든 파일과 하위 디렉토리를 서버 계정의 www 디렉토리 안에 복사 하려면 다음과 같이 한다.
[mbaltop@localhost mbaltop]$ scp -r test/ admin@192.168.0.221:www/
admin@192.168.0.221's password:
aa 100% |*************************************************| 0 00:00
bb 100% |*************************************************| 0 00:00
- sftp
sftp는 ssh하에서 전통적인 ftp 환경을 제공하며, 리모트상의 프로그램을 실행시킬수도 있다.
openSSH 클라이언트 패키지에는 sftp가 포함되어 있다.
# 참고
인터넷 암호화 및 인증시스템의 하나.
RSA (Rivest-Shamir-Adleman)
RSA는 1977년에 Ron Rivest, Adi Shamir와 Leonard Adleman에 의해 개발된 알고리즘을 사용하는 인터넷 암호화 및 인증 시스템이다.
RSA 알고리즘은 가장 보편적으로 사용되는 암호화 및 인증 알고리즘으로서, 넷스케이프와 마이크로소프트 웹브라우저 기능의 일부로 포함된다. 이것은 또한 로터스 노츠,
인튜잇의 Quicken 등 많은 제품에 채용되어 있기도 하다. 이 암호화 시스템의 소유권은 RSA Security라는 회사가 가지고 있다. 이 회사는 알고리즘 기술들을 라이선스 해주고,
또 개발도구 등을 판매하기도 한다. 이 기술들은 기존에 이미 나와있거나 제안되어 있는 웹, 인터넷 및 컴퓨팅 표준들의 일부를 이루고 있다.
RSA 시스템의 동작원리
공개키와 개인키의 획득에 사용되는 알고리즘의 상세한 수학적 설명은 RSA 웹사이트에서 찾아볼 수 있다. 간단히 말해, 이 알고리즘은 두 개의 큰 소수 (소수는 그 숫자와 1로만
나누어지는 수이다)들의 곱과, 추가 연산을 통해 하나는 공개키를 구성하고 또하나는 개인키를 구성하는데 사용되는 두 세트의 수 체계를 유도하는 작업이 수반된다. 한번 그 키들이
만들어지면, 원래의 소수는 더 이상 중요하지 않으며, 버릴 수 있다. 공개 및 개인키 둘 모두는 암호화/복호화를 위해 필요하지만, 오직 개인키의 소유자만이 그것을 알 필요가 있다.
RSA 시스템을 사용하면, 개인키는 절대로 인터넷을 통해 보내지지 않는다.
개인키는 공개키에 의해 암호화된 텍스트를 복호화하는데 사용된다. 그러므로, 내가 만약 누군가에게 메시지를 보내는 상황을 가정해 보면, 나는 중앙의 관리자로부터 수신자의 공개키를
찾은 다음, 그 공개키를 사용하여 보내는 메시지를 암호화할 수 있다. 수신자는 그것을 받아서, 자신의 개인키로 복호화하면 된다. 프라이버시를 확실하게 하기 위해 메시지를 암호화하는 것
외에도, 자신의 개인키를 사용하여 디지털 서명을 암호화해서 함께 보냄으로써, 그 메시지가 틀림없이 바로 당신에게서 온 것임을 받는 사람에게 확신시켜줄 수 있다. 메시지를 받은 사람은,
발신자의 공개키를 이용해 메시지를 복호화할 수 있다. 아래의 표가 이러한 과정을 이해하는데 도움을 줄 수 있을 것이다.
구 분 누구의 어떤 키를 사용하나?
암호화된 메시지를 보냄 수신자의 공개키
암호화된 서명을 보냄 발신자의 개인키
암호화된 메시지를 복호화 수신자의 개인키
암호화된 서명 (발신자 인증) 을 복호화 발신자의 공개키
댓글 없음:
댓글 쓰기