Script de téléchargement SFTP, il n'y a pas de clé


1

J'ai besoin de télécharger un fichier sur un serveur.

Le serveur télécharge en utilisant SFTP.Après authentification, toute exécution de commande est interdite, donc je ne peux pas SSH directement dans, je dois entrer directement dans le sous-système SFTP.

Par exemple.

ssh -N [email protected] fonctionne bien, sauf que je ne peux rien SFTP.

Cependant, je peux très bien faire sftp [email protected].

Problème: J'ai besoin d'automatiser cela, l'authentification est interactive au clavier et non basée sur des touches.Je ne possède pas le serveur auquel je me connecte, ils ont simplement dit "Voici le mot de passe, téléchargez les fichiers chaque semaine." Et personne là-bas ne sait rien des clés ou des trucs comme ça.

sftp -b Les scripts batch n'autorisent pas l'authentification interactive au clavier.

J'en ai assez de télécharger manuellement le fichier.Ils ont envoyé le mot de passe de 8 caractères par e-mail non chiffré et il contient 3 des mêmes nombres à la fin et un mot du dictionnaire (c'est-à-dire "Words777") - prétendons que la sécurité n'est vraiment pas un problème ici.

Puis-je créer la clé SSH à partir du mot de passe uniquement?N'oubliez pas que je n'ai pas accès à l'autre serveur.Puis-je créer un script de cette manière?J'ai essayé d'utiliser différents packages, et même rsync pour effectuer le téléchargement, mais ils veulent tous accéder directement à SSH au lieu d'entrer directement dans le sous-système SFTP.

2

I think that if you create a ssh key without protecting it with a "passphrase", you can skip the keyboard interactive part and thus easily create the upload script you need. See for example here :

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

This will create the necessary files, you then just have to copy the public one (*.pub) on the remote server.


2

Install Expect that lets you script for situations like this.

sudo apt-get install expect

Set up a shell script

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

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

VAR=$(expect -c "
  spawn sftp [email protected]$HOST

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

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

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

echo "==============="
echo "$VAR"

0

Use Socat.

Example:

(sleep 2; echo password) | socat - EXEC: "sftp -o batchmode=no -o PubkeyAuthentication=no -b batchfile [email protected]",pty,setsid,ctty