쉘 스크립트로 sftp 자동화방안?

morolty의 이미지

말그대로 sftp (ssh를 사용하는 - scp라든지 sftp라든지 ...)를 아이디랑 비밀번호 없이 자동화 배포하는 스크립트를 만들어야 합니다.

여러가지 방법을 알아보다가 결국 포기하고 상의후에 그냥 ftp로 처리하기로 했는데요..

다음에 또 이런 요구가 들어왔을때 대응할 수 있도록 미리 좀 준비해두고 싶습니다..

1. ssh-keygen 이용 rsa 키 통신 - 수동으로 sftp를 최소 한번 접속할 수 있어야만 하는 문제
포트 변경 불가. 반드시 ssh (22번) 포트만을 사용해야 한다
클라이언트 측에서 rsa 키를 생성하여 서버로 전송해야 하는데, 그 전송작업 역시 sftp로 해야 하는 딜레마

2. expect / lftp 이용 - 패키지 설치시 : yum 명령어 사용해야 하는 문제 (yum의 config나 repo 설정을 해줘야 작동하는 에이전트도 있음)
- 소스 설치시 : .configure && make all 을 통해 컴파일을 해야 하는 문제
: 사전에 필요한 라이브러리가 없으면 그 라이브러리 또한 설치해야 하는문제
: 그 라이브러리를 소스파일로 배포하더라도 그것또한 .configure && make all 해야 함.
: 결국 sftp 하나만을 위해 엄청난 라이브러리의 설치가 필요해짐

3. curl 이용 - curl 스크립트를 처음부터 공부해야 함(시간적인 문제)
php환경 구축되어 있어야 함

클라이언트에서는 아예 아무것도 없이 미니멀로 centos 6.4 버전 설치하여 에이전트 프로그램을 설치하게 될 것 같습니다.

제가 알아본 방법 외에 혹시 다른 방법이 있을까요? 없다면, 미리 이러이러해서 불가능한 문제다 라는 대응문서(?) 를 하나 만들어놓고자 합니다.

morolty의 이미지

sftp 서버도 centos 6.4 환경입니다. vsftp로 구축한

cinsk의 이미지

cat id_rsa.pub | ssh remotehost "mkdir -p .ssh; cat >> .ssh/authorized_keys"

morolty의 이미지

비밀번호를 입력하는 부분이 있으면 안된다고 합니다..
아무리 생각해도 적어도 한번은 비밀번호를 치고 들어가서, 공개키를 .ssh에 복사해넣고 나서야 자동화가 될거라는 생각이 드는데
그걸 무조건 비밀번호를 자동으로 치고 들어갈 수 있게 자동화를 시키라고 합니다..
그래서 생각해낸게 expect인데 그것마저 난관에 부딪혔으니..

dgkim의 이미지

> 3. curl 이용 - curl 스크립트를 처음부터 공부해야 함(시간적인 문제)
> php환경 구축되어 있어야 함

위 내용에서, 제가 전에 말씀드렸던 wget이나 curl은 어떻냐고 했었는데,
wget이 보안상 문제로 사용할 수 없다고 하셨습니다.
curl도 역시 curl 쉘명령을 언급한 것이었습니다.

ubuntu는 업데이트 수행시 마찬가지로 비슷한 GET을 사용하지요.

어떤 요구사항이 있는지는 모르겠으나, http/https를 통한 배포나, anonymous ftp를 통한 코드 배포가 가장 일반적인 방법이리라 생각합니다.
네트워크 장비의 경우 anonymous ftp 하고 비슷한 tftp를 사용하여 업데이트를 하는 경우도 있었습니다.

ftp를 사용하는 경우도, ftp 명령을 직접 구현하는 방법보다는 curl 같은 툴에 이미 구현된 것을 사용하는 편이 편하다고 생각합니다.

--

ftp의 비밀번호는 anonymous ftp로 해결할 수 있는 부분이라 생각하며,
특별히 접근이 가능한 agent가 제한되어야 하는 것이 있나요? 로그인명/비밀번호(혹은 개인키) 쌍이 필요한 이유?
혹은, 임의의 특정망으로 제한 할 수는 없는 것인지. 망내 사용만 한다라고 하면, anonymous ftp, http(apache)에서 IP 제한을 사용할 수도 있을 것입니다.

--

참고 : http://kldp.org/node/140455

--
http://www.dgkim.net/

morolty의 이미지

저도 말씀하신 대로 ftp anonymous를 이용하자고 설득을 했으나 ... 설득이 안됩니다 ㅜ_ㅜ
보안 관련하여 모든 파일 송수신 때엔 반드시 sftp를 이용해야 한다 라는 규칙문서? 를 근거로 무조건 파일 송수신은 sftp! 라고만 하고 있어서..
여하튼 다시 한번 설득해봐야겠네요.. 답변 감사합니다..

dgkim의 이미지

일반적인 sftp 환경은, 권한이 있는 사용자가 공개키 혹은 비밀번호 혹은 그에 걸맞는 인증으로 사용을 하는데,

불특정한 클라이언트(특정 클라이언트가 특정 아이디 비밀번호 set을 사용하지 않는다?)에 배포로 사용한다?

anonymous sftp는 들어본 적이 없는데,
그런 것을 요구하는 것으로 보입니다.
(찾아보면, sftp에서 host 인증을 하는 것으로 풀 수는 있지 싶지만..)

sftp를 고집하는 것이 통신 보안을 위한 것이라면, https로 대체 가능하다고 봅니다.

용도에 적합한 보안도구를 사용하는 것이 맞다고 생각합니다.

--
http://www.dgkim.net/

morolty의 이미지

감사합니다 답변 참고하여 다시 설득해보겠습니다..

woonuk의 이미지

ssh 또는 sftp 를 쉽게 사용하기 위한 sshpass 란 도구가 있습니다.
사용법은 간단한 편이구요..

첫 로그인 시도할때 상대 호스트 키를 수용할 것인지 응답을 요구하는 경우
사용자측 /home/user/.ssh/config 파일에 다음 옵션을 사용할 수 있습니다.

Host *
StrictHostKeyChecking no
morolty의 이미지

앗!
감사합니다! !!
결국 방법이 있긴 있네요...........ㅜㅜ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.