• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    해결됨

vm 양방향 authorized_keys 와 known_hosts 등록 질문입니다.

20.03.19 18:31 작성 조회수 258

0

강의 잘 보고 있습니다. 감사합니다. 

그런데 강의해주신대로 해서 server -> node 로 단방향은 ssh 접속이 잘 되는데요.. node -> server 도 ssh 접속이 그냥 되도록 authorized_keys 와 known_hosts 등록되는 방법이 있을까요?

양방향으로 node <-> server 되도록 authorized_keys 와 known_hosts 등록하는 앤서블 스크립트를 작성하는 방법이 궁금합니다...  

감사합니다.

답변 3

·

답변을 작성해보세요.

1

안녕하세요 

현재 작성된 방법은 사용자가 known_hosts를 생성하는 방법과 authorized_keys을 코드화 했다고 보시면 됩니다. 

1. /usr/bin/ssh-keyscan -t ecdsa 를 통해서 known_hosts를 생성하고 이를  ~/.ssh/known_hosts 로컬에 저장 

2. ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa 를 통해서  authorized_keys를 생성하고 각 노드에 저장

따라서 노드에서 이걸 구현하려면...각 노드마다 앤서블 코어가 모두 설치되어서 #1번과 #2번이 실행되어야 하고 앤서블 호스트(/etc/ansible/hosts)가 구현되어 있어야 하는데요. 효율적일지 모르겠습니다. 

기본적으로 앤서블은 push 방식(서버에서 노드로 넣어줌) pull방식으로 구현도 가능하지만 어짜피 생성이후에 저장단계를 거치기 때문에 pull방식으로 구현한다고 해도 위의 방법에서 벗어나지 않을 것 같습니다. 

앤서블은 아시겠지만, agentless로 서버에서 노드로 넣어주는 구조이기 때문에 역 구조를 앤서블에서 고려할 필요가 없어서요. 다만 kubespray와 같이 모든 노드(서버,노드)가 cross로 인증이 모두 처리되어야 있어야 하는 경우에는 저는 bash로 작성해서 모든 노드에서 실행하여 처리하였습니다. (고민을..하기가 번거로워서 --;;;;)

모든 노드에서의 인증 처리를 아래와 같은 bash 코드를 참고해 보시면 좋을꺼 같네요.

#Auto_Pass 
#if you want to filter only ip then [grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}']

#make a directory 
mkdir ~/.ssh

#Read hosts from file 
readarray hosts < /etc/hosts

##1.known_hosts##
if [ ! -f ~/.ssh/known_hosts ]; then
  for host in ${hosts[@]}; do 
    ssh-keyscan -t ecdsa ${host} >> ~/.ssh/known_hosts
  done
fi

##2.authorized_keys
if [ ! -f ~/.ssh/id_rsa.pub ]; then
  ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N ''
    for host in ${hosts[@]}; do 
       sshpass -p vagrant ssh-copy-id -f ${host}
    done
fi

조훈 드림

0

넵 도움이 되신거 같아서 다행이네요 ^^

조훈 드림. 

0

귀찮은 질문인데도 친절하고 빠른 답변 감사드립니다 ~~  나머지 강의도 잘 듣겠습니다

다른 강의들도 많이 부탁드려요~~