web-dev-qa-db-fra.com

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

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

Le serveur télécharge à l'aide de SFTP. Après l'authentification, toute exécution de commande est interdite, donc je ne peux pas SSH directement, je dois accéder directement au sous-système SFTP.

Par exemple.

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

Cependant, je peux faire sftp [email protected] ça va.

Problème: J'ai besoin d'automatiser cela, l'authentification est interactive au clavier et non basée sur les clés. 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 sait rien sur les clés ou des trucs comme ça.

sftp -b Les scripts batch ne permettent pas l'authentification interactive au clavier.

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

Puis-je créer la clé SSH à partir du seul mot de passe? N'oubliez pas que je n'ai pas accès à l'autre serveur. Puis-je écrire ceci d'une manière ou d'une autre? 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.

1
Incognito

Installez Expect qui vous permet de script pour des situations comme celle-ci.

Sudo apt-get install expect

Configurer un script Shell

#!/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"
2
Incognito

Je pense que si vous créez une clé ssh sans la protéger avec une "phrase de passe", vous pouvez ignorer la partie interactive du clavier et ainsi créer facilement le script de téléchargement vous avez besoin. Voir par exemple ici :

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

Cela créera les fichiers nécessaires, il vous suffira alors de copier le fichier public (* .pub) sur le serveur distant.

2
dandelionmood

Utilisez Socat .

Exemple:

(sleep 2; echo password) | socat - EXEC: "sftp -o batchmode=no -o PubkeyAuthentication=no -b batchfile user@Host",pty,setsid,ctty
0
user141292