bash 스크립트에 SSH 알려진 호스트를 추가하는 방법은 무엇입니까?


13

웹 응용 프로그램을 배포 할 수있는 새 서버를 프로비저닝하기 위해 bash 스크립트를 만들고 있습니다. 내가 항상해야 할 일은을 사용하는 알려진 호스트로서 GitHub ssh git@github.com입니다. bash 스크립트에서이 프로세스를 자동화하고 dem 등원 방식으로 수행하려면 어떻게해야합니까?

답변:


17

가는 간단한 방법은 이런 식으로하는 것입니다.

ssh-keyscan remote_server >>~/.ssh/known_hosts

이 상자가 최신 인 경우 ssh-keyscan~/.ssh 을 실행하기 전에 디렉토리 를 작성해야 할 수도 있습니다 .

ssh-keyscan은 임의의 수의 호스트 이름을 사용할 수 있습니다. 가능한 모든 키를 얻습니다.


1
추신-프로비저닝을 위해서는 bash 스크립트 대신 꼭두각시와 같은 것을 사용해야합니다. 꼭두각시의 경우 sshkey 리소스를 사용하여 쉽게 처리 할 수 ​​있습니다 . 또한에서 known_hosts를 관리하는 방법에 대한 EN-한꺼번에이 질문을 참조 serverfault.com/a/416782/984
Zoredache

2
그 말은 나에게 좋게 들렸지 만 꼭두각시와 경쟁사에 몇 시간을 보낸 후에 나는 대본과 정신을 버렸다. 이러한 도구가 직관적이라면 직관이없는 것 같습니다. YMMV.
Ron Burk

bash를 사용하십시오. 꼭두각시 나 ansible과 같은 다양한 버전의 문제가 계속 발생합니다. 우리는 항상 bash로 돌아갑니다 ... 지금처럼 3 개의 회사가 운영 중이며 bash는 항상 신뢰할 수 있습니다.
Ligemer

4

새 키 수락을 자동화하려고합니까? 그렇다면 -oStrictHostKeyChecking = no를 사용할 수 있습니다.
중간자 (man-in-the-middle) 공격에 완전히 개방되어 있기 때문에 그렇게하는 것은 매우 나쁜 생각입니다.

더 나은 옵션은 known_hosts 파일을 관리하고 새 서버를 프로비저닝 할 때 해당 파일을 재사용하는 것입니다. github에 고정시키고 github에 sshing하기 전에 해당 파일을 다운로드하는 간단한 스크립트를 작성하십시오.

엄격한 호스트 키 검사가 좋습니다.


"manage known_hosts 파일"에 대해 자세히 설명해 주시겠습니까? 그게 내가하고 싶은 일이라고 생각하지만 파일을 볼 때 내용은 일종의 해시 / 키처럼 보였으며 수동으로 관리하려는 것으로 보이지 않았습니다.
Andrew

2
새 서버를 프로비저닝하고 수동으로 github에 ssh하십시오. 프롬프트가 표시되면 호스트 키를 승인하십시오. 로그 아웃. 새로 프로비저닝 된 서버의 다른 곳에서 ~ / .ssh / known_hosts를 복사하십시오 (github, 웹 서버는 얻을 수있는 한 중요하지 않습니다). 다음에 서버를 프로비저닝 할 때는 github에 sshing하기 전에 해당 파일을 다시 복사하십시오. 파일을 편집 할 필요가 없습니다.
yoonix

이것은 내 대답보다 좋습니다. yoonix의 대답에 대한 추가 개선 사항은 'ssh-keyscan github.com'을 구문 분석하고 반환 된 키를 ~ / .ssh / known_hosts에 저장하여 업데이트해야 할 파일의 정적 위치가 아닌 방식으로 ~ / .ssh / known_hosts에 저장하는 것입니다.
Sirex

그것도 효과가 있지만, 나는 그것을 더 잘 고려하지 않을 것입니다. 매번 새 호스트 키를 잡는 경우 중간자 공격을 시도 할 가능성이 있습니다.
yoonix

1
마지막 설명을 명확하게하려면 (편집하기에 너무 늦음) : 호스트를 프로비저닝 할 때마다 새 호스트 키를 가져 오는 것은 기능적으로 StrictHostKeyChecking = no를 설정하는 것과 다릅니다. 둘 중 하나를 사용하면 프로비저닝 할 때마다 전송되는 키를 맹목적으로 신뢰합니다. MITM 공격이 거의 없을 것이라고 생각되면 기사를 읽으십시오 . Github는 거대한 목표가 될 것입니다.
yoonix

1

나는 질문을 이해하지 못하지만 known_host 프롬프트를 무시하거나 완전히 피하고 싶다고 생각합니다.

ssh -o StrictHostKeyChecking = 아니오

또는 다른 제안 : http://www.joedog.org/2012/07/ssh-disable-known_hosts-prompt/


GitHub 호스트 키를 수락하는 비 대화식 방법을 원합니다 (bash 스크립트에서 발생하기 때문에).
Andrew

그런 다음 작동합니다-키를 수락하지는 않지만 완전히 무시합니다. Yoonix의 답변이 낫습니다
Sirex
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.