Мне нужно загрузить файл на сервер.
Сервер загружает с использованием SFTP. После аутентификации выполнение любой команды запрещено, поэтому я не могу напрямую войти в SSH, мне нужно напрямую войти в подсистему SFTP.
Например.
ssh -N user@example.com
работает нормально, за исключением того, что я ничего не могу SFTP.
Тем не менее, я могу сделать sftp user@example.com
просто отлично.
Проблема: Мне нужно автоматизировать это, аутентификация интерактивна с клавиатуры, а не на основе клавиш. Мне не принадлежит сервер, к которому я подключаюсь, они просто сказали : «Вот пароль, загружайте файлы каждую неделю». И никто там ничего не знает о ключах или подобных вещах.
sftp -b
Пакетные сценарии не разрешают интерактивную аутентификацию клавиатуры.
Мне надоело загружать файл вручную. Они отправили 8-значный пароль по незашифрованному электронному письму, и он содержит 3 одинаковых числа в конце и одно словарное слово (то есть «Words777») - давайте притворимся, что безопасность на самом деле здесь не проблема.
Могу ли я сделать ключ SSH только из пароля? Помните, у меня нет доступа к другому серверу. Могу ли я написать это каким-то образом? Я пытался использовать разные пакеты и даже rsync
сделать загрузку, но все они хотят получить доступ к SSH напрямую, а не напрямую в подсистему SFTP.
Я думаю, что если вы создадите ssh-ключ без , защищая его «парольной фразой», вы можете пропустить интерактивную часть клавиатуры и, таким образом, легко создать необходимый сценарий загрузки. См., Например, здесь :
ssh-keygen -t rsa -C "Your Name" -f your_key
Это создаст необходимые файлы, вам просто нужно скопировать публичный (* .pub) на удаленном сервер.
Установите Ожидайте , который позволит вам писать сценарии для подобных ситуаций.
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"
Используйте Сокат .
Пример:
(sleep 2; echo password) | socat - EXEC: "sftp -o batchmode=no -o PubkeyAuthentication=no -b batchfile user@host",pty,setsid,ctty