Скрипт загрузки SFTP, ключа нет

Мне нужно загрузить файл на сервер.

Сервер загружает с использованием SFTP. После аутентификации выполнение любой команды запрещено, поэтому я не могу напрямую войти в SSH, мне нужно напрямую войти в подсистему SFTP.

Например.

ssh -N user@example.com работает нормально, за исключением того, что я ничего не могу SFTP.

Тем не менее, я могу сделать sftp user@example.com просто отлично.

Проблема: Мне нужно автоматизировать это, аутентификация интерактивна с клавиатуры, а не на основе клавиш. Мне не принадлежит сервер, к которому я подключаюсь, они просто сказали : «Вот пароль, загружайте файлы каждую неделю». И никто там ничего не знает о ключах или подобных вещах.

sftp -b Пакетные сценарии не разрешают интерактивную аутентификацию клавиатуры.

Мне надоело загружать файл вручную. Они отправили 8-значный пароль по незашифрованному электронному письму, и он содержит 3 одинаковых числа в конце и одно словарное слово (то есть «Words777») - давайте притворимся, что безопасность на самом деле здесь не проблема.

Могу ли я сделать ключ SSH только из пароля? Помните, у меня нет доступа к другому серверу. Могу ли я написать это каким-то образом? Я пытался использовать разные пакеты и даже rsync сделать загрузку, но все они хотят получить доступ к SSH напрямую, а не напрямую в подсистему SFTP.

1
задан 28 April 2011 в 20:37

3 ответа

Я думаю, что если вы создадите ssh-ключ без , защищая его «парольной фразой», вы можете пропустить интерактивную часть клавиатуры и, таким образом, легко создать необходимый сценарий загрузки. См., Например, здесь :

ssh-keygen -t rsa -C "Your Name" -f your_key

Это создаст необходимые файлы, вам просто нужно скопировать публичный (* .pub) на удаленном сервер.

0
ответ дан 28 April 2011 в 20:37

Установите Ожидайте , который позволит вам писать сценарии для подобных ситуаций.

sudo apt-get install expect

Настройка сценария оболочки

#!/bin/bash
HOST=""
USER=""
PASS=""

# Sorry for the offensive "assword", it's to cope with "Password" and "password".

VAR=$(expect -c "
  spawn sftp $USER@$HOST

  expect \"assword:\"
  send \"$PASS\r\"

  expect \"\\\\$\"
  send \"ls\r\"

  expect -re \"$USER.*\"
  send \"exit\"
")

echo "==============="
echo "$VAR"
0
ответ дан 28 April 2011 в 20:37

Используйте Сокат .

Пример:

(sleep 2; echo password) | socat - EXEC: "sftp -o batchmode=no -o PubkeyAuthentication=no -b batchfile user@host",pty,setsid,ctty
0
ответ дан 28 April 2011 в 20:37

Другие вопросы по тегам:

Похожие вопросы: