Как скопировать файлы с локального компьютера на сервер, используя протокол передачи файлов SSH? - PullRequest
3 голосов
/ 11 мая 2010

У меня есть настольный компьютер с Ubuntu 9.10, который я использую локально. Я настраиваю сервер на хостинг-провайдере. На сервере будет работать очень минимальная версия UTS-сервера Ubuntu LTS (только LAMP и сервер электронной почты без графического интерфейса).

Я хочу написать скрипт (запланированный как задание cron), который позволит мне загружать локальные файлы на сервер. Я хочу использовать [SFTP] [1] по соображениям безопасности.

Я новичок в написании сценариев оболочки, но я думаю, что сценарии оболочки - это способ сделать это (если я не ошибаюсь).

Кто-нибудь может дать мне начальные указания о том, как написать такой скрипт, чтобы БЕЗОПАСНО загружать локальные файлы на сервер?

В идеале я бы хотел сжать файлы перед передачей (чтобы сэкономить на пропускной способности)

[1]: http://SSH протокол передачи файлов

Ответы [ 2 ]

6 голосов
/ 11 мая 2010

Независимо от того, пишете ли вы «БЕЗОПАСНО» или «безопасно», мы не можем прочитать ваши мысли и сказать, от чего вы хотите обезопасить себя. Поэтому я дам базовый рецепт и расскажу, для чего он хорош. Вероятно, все это должно перейти к суперпользователю.

  1. изучите базовую оболочку Борна. Учебник для этого не может вписаться в ответ на стеке потока.
  2. запустите ssh-keygen, чтобы создать пару ключей ssh. Так как вы хотите запустить scp из cron, вы не можете использовать фразу-пароль AFAIK. Это означает, что вы должны быть уверены, что копируемый компьютер защищен от вторжений.
  3. скопируйте открытый ключ из пары ключей ssh ​​в ваши .ssh / authorized_keys на целевом компьютере.
  4. докажите, что это работает, запустив ssh target-machine и успешно войдя в систему без sans-пароля.

Теперь вы можете создать сценарий оболочки, который использует команду scp для создания реальных копий. Начать с:

#!/bin/sh
scp PATHNAME_OVER_HERE target-host:/PATHNAME_OVER_THERE

Это защищено от слежки за основным паролем и от случайных подключений к целевому хосту через telnet. Это небезопасно, если исходная система не защищена, и я не могу поручиться за безопасность протокола ssh, хотя он, безусловно, широко используется.

4 голосов
/ 11 мая 2010

Как скопировать файлы с локального компьютера на сервер, используя протокол передачи файлов SSH?

Использование scp.

Я хочу сделать это в работе cron.

Основная проблема с использованием scp в задании cron заключается в следующем: где вы берете свои учетные данные? Ввод вашего пароля в открытом виде не очень хорошая идея. Лучшая идея - запустить процесс ssh-agent на вашем компьютере. Чтобы найти соответствующий ssh-agent, вы можете запустить этот скрипт:

#!/bin/sh

for i in $SSH_AUTH_SOCK /tmp/ssh*/agent*
do
  if [ -r "$i" -a -w "$i" ]; then
    case `SSH_AUTH_SOCK="$i" ssh-add -l` in
      *:*:*) echo "$i"; exit 0 ;;
    esac
  fi
done

exit 1

Если сценарий выполнен успешно, вы получаете значение, которое вы можете поместить в переменную окружения SSH_AUTH_SOCK перед запуском scp.

Когда вы запускаете клиент, вы должны представить свои учетные данные, запустив ssh-agent и запустив ssh-add.

...