본문 바로가기

Management/Linux

ssh을 이용한 공개키 만들기.

고민 :
개발실에서 빌드 후, 패치하고자 합니다. 문제는 서버가 100대가 넘어..ㄲㅣ악~* 수동으로 100대를 다다다다
다다다다다다다다 이런 xx같은 짓은 하면 안되죠. 그래서 자동화를 합니다. 자동화는 알아서 툭툭툭툭 쫘잔..
만쇄!! 그러기 위해서는 어떻게 자동화를 하고 어떻게 해야 될지 고민을 해봐야합니다.

저는 말이죠! 일단 100대를 수동으로 했습니다. 그런데 끙끙끙 어 내가 어디까지 패치 했쥐? 어 망!!! ㅠ_ㅠ
시간은 쭈루룩 흐르고 등에서는 식은땀이 .... 어디선가 외치면서 물어보네요.. 어디까지 했어!(?) 아 눼...
열심히 하고 있어요..ㅠ_ㅠ

일일이 100대를 컨트롤 하기는 쉽지는 않죠..

서론이 길었습니다. 이제 본격적으로 해결방안에 대해서 모색해보죠.
그럼 100대를 id/pw 없이 서버에 접속을 하는 방법을 찾다 보니깐 ssh 공개키 구현 방법이 있었습니다.


공개키 구현 방법.
고민은 id/pw 없이 서버에 패치 서버에 접속하는 것입니다.
1. id/pw 접속한다. ( x ) ( 엄청나게 많은 서버가 있다면 허덜덜덜..)
2. id/pw 없이 공개키로 접속한다. ( 오흥 바로 이거야 )
union00@Server:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/union00/.ssh/id_rsa):
키가 지정될 곳과 이름을 물어 보는데, 디폴트로 그냥 엔터를 치고 넘어가면, 다음과 같이 인증키 암호를
물어온다. 원하는 암호를 두번 반복해서 입력해 주면키가 생성이 된다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/union00/.ssh/id_rsa.
Your public key has been saved in /home/union00/.ssh/id_rsa.pub.
The key fingerprint is:
e7:04:a9:34:4e:95:8c:4b:f7:74:f1:e7:12:7c:7e:11 union00@Server
와 같이 작업을 하면 공개키를 생성할 수 있다.
이러한 공개키를 원격 리모트에 복사해야 한다.

공개키 배포
이제 ~/.ssh 안에 한쌍의 키 (id_rsa와 id_rsa.pub)가 생성되어 있을 것이다. .pub 확장자가 붙은 것은 
공개키로 이 파일을 접속할 리모트 서버들의 ~/.ssh/와 authorized_keys라는 이름으로 복사해준다.

union00@Server:~/.ssh> cp id_rsa.pub identity.pub

인증키를 복사한 후, 리모트 서버에 복사해 넣는다.

union00@Server:~/.ssh> scp ~/.ssh/identity.pub yulgang@xxx.xxx.xxx.xxx:.ssh/authorized_keys

이제 ssh 접속을 진행 해보면 계정 암호가 아닌 인증키 암호를 물어볼 것이다. 만약 계정 암호를 물어본다면
원격 서버상의 ~/.ssh 디렉토리나 공개키 권한의 문제이므로 일단 접속 후 chmod 755 ~/.ssh 그리고
chmod 644 .ssh/authorized_keys 해준다.

ras1 방식의 ssh1 프로토콜의 사용할 것이므로 ssh-agent -t ras1으로 키를 만들고, 공개키 (identity.pub)를
같은 방법으로 원격 서버의 ~/.ssh/authorized_keys 에 추가해 주면 된다.

키 파일을 다른 이름으로 저장했거나 서버마다 다른 키를 사용하려면 ssh에 -i 옵션을 사용해 키 파일을
직접 지정해 주면 된다.


메모리에 키(key) 상주 시키기.
다음 방법으로 인증키를 메모리에 기억시켜 두면 처음 한번만 인증키 암호를 입력하면 다음부터는 
암호를 입력하지 않아도 같은 인증키를 사용하는 모든 서버들에 접속 할 수 있다.

union00@Server:~/.ssh> eval $(ssh-agent)
Agent pid 4384
union00@Server:~/.ssh> ssh-add
Enter passphrase for /home/union00/.ssh/id_rsa:

이제 인증키를 복사해둔 ssh 서버에 접속하면 이 세션에서는 더 이상 암호를 묻지 않을 것이다.
서버가 지원한다면 되도록 ssh2 프로토콜을 사용하도록 한다. ssh2는 ssh1과는 전혀 다른 프로토콜
이며 더욱 안전하고 성능이 좋다.

연결 테스트 스크립트.
$vi serverlist.ini
192.168.0.100
192.168.0.101
192.168.0.102
192.168.0.103
192.168.0.104
192.168.0.105
192.168.0.106
192.168.0.107
192.168.0.108
192.168.0.109
192.168.0.110
192.168.0.111

$vi connect.sh
#!/bin/bash

for host in `cat serverlist.ini`
do
echo "=================================================="
echo " Connect [$host] START "
echo "=================================================="

#ssh -p 22 patches@$host
ssh patches@$host

echo "=================================================="
echo " Close [$host] STOP "
echo "=================================================="
done

$./connect.sh

쌩유.
스크립트를 이용하여 서버에 쪼로록 연결이 되는것을 알 수 있습니다. 이것을 응용을 할 수 도 있습니다.
서버에 패치를 서버 리스트에 있는 아이피를 쭉 하나씩 읽어서 또 다른 작업을 할 수도 있죠.

응용은 많이 할 수 있습니다. ㅋ_ㅋ 너무 자세히 설명하면 도움이 안될것 같아서 고민을 하시면서
이것저것 테스트를 한다면 보다 좋은 시스템을 만들 수 있지 않을까 합니다.

더 많은 걸 원하세요? [ YES] or [ NO ]

YES을 누르면 천기 누설로 오래 못살아여..>_<;