프로그램

ssh 설정

고요한하늘... 2011. 7. 6. 12:37

SSH 설정 방법


서버가 A B C 3개의 서버가 있다고 하고

세개의 서버들이 서로 SSH가 가능하도록 설정하는 과정은 다음과 같다.


아래 작업들은

A -> B ,C

B -> A, C

C -> A, B

와 같이 모두 설정하는 것을 가정한다.



서버를 접근할수 있도록

/etc/hosts.allow 파일에 ssh를 허용하는 서버 ip를 등록해야 하고

ip가 아닌 도메인으로 접근하기 위해서는 /etc/hosts 파일에 해당 IP에 대한 도메인을 등록해야 한다.

A서버 /etc/hosts 파일

XXX.000.XXX    B

000.XXX.XXX    C


A서버 /etc/hosts.allow 파일
sshd:XXX.000.XXX , 000.XXX.XXX




우선 각 서버(A,B,C)에서 아래의 명령어로 서버들 사이에 보안을 위해 주고받을 키값을 생성한다.

# ssh-keygen -t rsa

enter

enter

이후에 생성된 키값을 다른 remote(A에서 생성했을때 B,C 가 remote server가 된다) 서버에 복사해야 한다.

리눅스 버전에 따라서 두가지로 나뉘는데

4.x에서는 수작업으로 복사를 해야하고

5.x에서는 해당 작업을 수행하는 바이너리가 존재한다.


우선 4.x대일 경우

# cat .ssh/id_rsa.pub

위 명령어를 실행하면 해당 서버에서 발행항 키값이 보인다.

이 키값을 다른 remote 서버에 복사하면 되는데

.ssh/authorized_keys에 복사한 키값을 넣고 저장한다.


5.x대의 경우는 ssh-copy-id 라는 바이너리가 존재하는데

ssh-copy-id -i ~/.ssh/id_rsa.pub target-server







서버라고 하더라도 간혹 다시 부팅을 해야 하는 경우가 있다.

이럴 경우 자동으로 sshd을 실행하기 위해서는 다음과 같은 작업을 해야한다.

서버가 부팅될때 어떤 프로그램들을 구동할때 어떤 레벨로 구동되는지를 알아야 한다.

그런 정보가 있는 파일이 /etc/inittab이라는 파일인데

이파일의 내용을 보면

cat /etc/inittab


id:3:initdefault:
라는 내용이 있다.(3레벨은 일반적인 세팅이다)


위 내용은

ls -al /etc/rc3.d/ 아래에 있는 스크립트들을 자동으로 실행한다는 의미인데

이파일을 자세히 보면 모두 심볼릭 링크로 되어 있는것을 알수 있다.

수작업으로 이 파일을 만들어 심볼릭 링크로 연결할수도 있지만

자동으로 하는 방법을 소개하면

# chkconfig --level 3 sshd on

# /etc/init.d/sshd restart

chkconfig 라는 바이너리인데 level 3으로 sshd 데몬을 실행한다는 의미가 되겠다.




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

이렇게 설정했는데 계속해서 패스워드를 묻는다면

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

* (local server -> remote server) remote 서버에 대한 설정

.ssh 디렉토리 권한은 700

chmod 700 .ssh

.ssh/authorized_keys 권한은 640

chmod 640 .ssh/authorized_keys



remote server의 해당 계정에 대한 권한을 755로 수정

chmod 755 .



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

                           ssh 로 스크립트 실행

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

ssh로 remote server의 script를 실행할경우

해당 스크립트에서 daemon과 같은 프로그램이 실행될수 있다.

이럴 경우 local script와 remote server의 daemon 사이에 stdin과 stdout이 서로 물리게 된다.

remote sever의 실행 결과를 local server에서 볼수 있는 것과 위 기능때문인데

데몬의 경우 프로그램이 종료되지 않기 때문에 local server의 script도 해당 라인에서 대기

상태로 머물러 있게 된다.

여러대의 서버를 순차적으로 실행하기 위해서는

local server의 script에 stdin과 stdout을 막아 놓아야 하는데

이럴때 사용하는 방법이 아래와 같다.


 

 exec 1<>/dev/null 2<>/dev/null


 

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



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

SERVER1 -> SERVER2

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

 * To do SERVER1

ssh-keygen -t rsa


copy

cat .ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1dUMxF2J8S1Wzo+m2LWEV7tK6Cma1GVx25IDmiC6f5lj/Yn9TyIEMO7jmafXkHkoHRlg9WMfv+Jx9+a5ADTSa2hKHG+BmEIxJfGp5tOUDOZcS8qbCsWSTkRzHiQ1FyY3mQ5lMqA4SgrDoKOQQEg1El9mhAENkIa5Sn0T+0HtG7Qr742uIiP0fLqi9MFZDAi7GiQ9AVUyXnAvi0LMtPVMb+q1LDX1us96PEegeWE2v0NzB9qqX0LUfdCjEBGr3dcOx1z/EOV+poeF64rhH10vbqtaf7Qf0C8Vu396ZxWZ/sDWz6SK0A6TClAg/q3mqpWQ7FX25k2SNuCXbtSyrC4jvQ== jchern@search-nlp-anal1





 * To do SERVER2

vi /etc/hosts

SERVER2_IP SERVER_NAME

vi /etc/hosts.allow

sshd:SERVER2_IP




vi authorized_keys

SERVER1의 id_rsa.pub를 authorized_keys에 복사

chmod 700 .ssh
chmod 640 .ssh/authorized_keys

* TIP 
ssh_exchange_identification: Connection closed by remote host
vi /etc/hosts.deny를 열고
ALL:ALL 주석 처리


 * troubleshooting

It is recommended that your private key files are NOT accessible by others.


chmod 600 id_rsa