ssh tunneling & /etc/hosts.allow

2009. 12. 2. 07:5499. 정리전 - IT/13. Unix 얇팍지식

SSH 자동로그인 설정 방법

1. 암호화 방식 (둘 중 하나만 사용한다.)
- dsa
- rsa


2. 암호 생성 방법
    보통 엔터만 계속 치면 되지만, 기존에 사용하는 암호가 있을 경우 덮어 쓸지 물어봄.
    새롭게 만들꺼면 덮어쓰면 되고, 기존에 있는 걸 쓸 경우 취소하고, 기존 암호를 이용.
- ssh-keygen -t dsa
- ssh-keygen -t rsa

3. ~/.ssh 에 존재하는 암호를 확인
   cat 파일명
- dsa는 id_dsa.pub
- rsa는 id_rsa.pub

4. 상대방 서버의 ~/.ssh 폴더에 있는 인증파일(authorized_key)에 암호를 넣는다.
    아래의 파일이 없을 경우 생성한다. 퍼미션 (644)
- dsa는 authorized_key
- rsa는 authorized_key2
   
    인증파일 안에 이미 기존에 넣은 암호가 있으면 지우고 다시 넣는다.
    (암호 후반부에 계정명이랑 도메인 이름이 있음.)

    '복사 - 붙여넣기' 가 귀찮은 사람은...
    scp로 상대방 서버에 복사하고
    dsa인 경우 scp id_rsa.pub test.com:~/.ssh/authorized_keys
    rsa인 경우 scp id_rsa.pub test.com:~/.ssh/authorized_keys2

※여기서 잠깐!!!
authorized_keys 라던지 authorized_keys2 의 이름을 결정할 경우
접속할 곳의 /etc/ssh/sshd_config 의 설정을 보고
AuthorizedKeysFile 부분의 설정을 참고하여야 한다.
AuthorizedKeysFile 부분에 설정되어있지 않는 이름을
지정하면 RSA를 사용할 수 없다.



    그 후 cat 명령어로 인증파일에 추가해도 된다.
    dsa인 경우 cat id_rsa.pub >>~/.ssh/authorized_keys
    rsa인 경우 cat id_rsa.pub >>~/.ssh/authorized_keys2

5. 쌍방향 자동로그인을 하려면 반대로 하면 됨.

* 기타 퍼미션 설정이나 계정문제가 있는데, 일반 계정으로 만들면 대게 별 이상 없음.

-rw-r--r--  1 msms msms  612  1월 20 11:31 authorized_keys
-rw-r--r--  1 msms msms  464  1월 20 11:54 authorized_keys2
-rw-------  1 msms msms  668  8월  7 13:43 id_dsa
-rw-r--r--  1 msms msms  607  8월  7 13:43 id_dsa.pub
-rw-------  1 msms msms  887  1월 20 11:41 id_rsa
-rw-r--r--  1 msms msms  227  1월 20 11:41 id_rsa.pub
-rw-r--r--  1 msms msms 2430  1월 20 09:39 known_hosts




RSA key 설정

1) 클라이언트(접속하려고 하는) 쪽에서 public, private 키 페어를 만든다.
-> 열쇠점에 주문해서 열쇠와 자물쇠를 만든다.

2) 생성된 public key 를 서버에 전송한다. private key 는 종류에 따라서 ~/.ssh/identity 혹은 ~/.ssh/id_rsa, ~/.ssh/id_dsa 에 저장해둔다.
3) 서버 쪽의 ~/.ssh/authlized_keys 파일에 public key 를 등록한다
-> 자물쇠(public key)를 문에 설치하고, 열쇠(private key)는 자기가 갖고 있는다.

4) 그리고 나서 클라이언트 쪽에서 private key 를 이용해서 서버에 접속한다.
-> 열쇠(private key)를 자물쇠(public key)에 끼워서 맞으면 문을 열 수 있다.

공개키는 다른 사람이 봐도 상관 없으니,
-> 자물쇠는 맞는 열쇠가 없으면 열 수 없으니 모두에게 공개되어도 된다



hosts.allow
ssh접속허가 설정파일
# from AT&T
sshd: 222.111.10.9

설정후 서비스 재기동
> /etc/rc.d/init.d/sshd restart


[팁] ssh 무차별 로그인 공격 막기
http://sir.co.kr/bbs/board.php?bo_table=pl_apache&wr_id=23

---------------------------------------------------------------------------------------

ssh tunneling

ssh는 다양한 기능이 많은데, 그중에 하나가 tunneling 기능이다. 여기서 설명할 상황은 다음과 같다.

notebook 한대가 있는데, 이것은 사무실과 집 등 다양한 장소에서 사용이 가능하다. 그런데, 집에서 회사의 특정 server에 접속하려고 하는데, 이 server는 firewall 설정으로 인해 외부로 부터의 접속을 차단하고 있어, 접속할 수가 없다.
하지만, 나에게는 회사에 ssh 접속이 가능한 linux가 설치된 desktop이 있다.
이제, notebook에서 desktop을 거쳐 회사의 server에 ssh로 접속하는 방법에 대해 알아 보도록 하자.

간단히 요약하면 과정은 다음과 같다.
  • desktop에서 다음 명령을 실행하고, 접속을 계속 유지시킨다. (즉, 터미널 창을 닫지 말고 유지해야 한다.)
$ ssh -R 5000:server:22 desktop_user@desktop

이것은 desktop의 port 5000으로부터 수신되는 모든 packet을 server의 port 22로 전달하는 일을 하는 ssh 프로그램을 기동하는 것이다.
  • notebook에서 다음 명령을 실행하고, 접속을 계속 유지시킨다.
$ ssh -L 5000:server:22 desktop_user@desktop

이것은 notebook과 desktop 사이의 tunneling을 유지하는 ssh 프로그램을 기동하는 것이다. 이제 notebook의 port 5000으로 입력되는 모든 packet이 desktop port 5000으로 전달 되는 것과 같은 효과를 가진다.
이 방법은 5000 포트를 이용하여 desktop에 접속할 수 없는 경우에, ssh 연결을 통해 5000 포트를 이용하는 것과 같은 효과를 보인다.
  • 다음 명령을 이용하여 서버에 접속한다.
$ ssh server_user@localhost -p 5000

이제 localhost의 포트 5000에 접속을 하면, ssh에 의해 packet이 desktop에 전달 되고, 다시 desktop에서 server로 전달된다.

사실, 항상 ssh -L 옵션에 해당하는 명령을 실행하고 접속을 하기 때문에, 이 명령의 역할이 이 글에 나열된 것과 동일한지 확인치 못했다.

이것저것 확인하기 귀찮으면, 이 방법을 그대로 따라해도 된다. 또한, 5000 이라는 포트 번호만 바꿔 주면, MSN등의 다른 서비스에 대한 터널링도 가능하다. 이러한 터널링은 외부 접속이 차단된 어떤 단체 내부에서 차단된 서비스를 이용하고자 할때 외부에 서버를 설치하고, 터널링을 연결하는 경우에도 사용할 수 있다.

ssh의 경우 port 22번을 기본으로 사용하지만, 외부 서버의 설정을 바꾸면 80 포트와 같이 http를 위한 포트를 ssh로 사용할 수 있기 때문에, 거의 어떠한 경우에도 적용이 가능한 방법이다.