J'essaie d'écrire un script pour sauvegarder un fichier sur SFTP. Le problème est que cela nécessite un mot de passe, et je ne vois aucun moyen de spécifier manuellement un mot de passe à SFTP. J'ai entendu parler de ne nécessitant aucun mot de passe en utilisant des clés publiques, mais cela nécessite de pouvoir être capable de passer à SSH dans le serveur distant et de modifier certains fichiers de configuration, que je ne peux pas faire. p>
Actuellement, ma solution consiste à utiliser Curl , mais c'est insécurité (utilise la FTP normale). J'ai également consulté le fichier .netrc code>, mais cela semble être pour FTP au lieu de SFTP. Comment spécifier manuellement un mot de passe pour SFTP? P>
6 Réponses :
Pour utiliser des touches publiques, vous n'avez pas besoin de modifier les "fichiers de configuration". Vous avez simplement besoin de laisser une copie de votre clé publique dans un endroit où SSH sait regarder (normalement ~ / .ssh / autorisé_keys code>). Vous pouvez le faire avec SFTP. Si vous n'avez pas établi de fichier agréé_keys sur le serveur, vous pouvez simplement mettre votre fichier id_rsa.pub à sa place. P>
Vous avez raison. Voici la procédure: vous pouvez utiliser SSH-Keygen puis SSH-Copy-ID -I -I ~ / .SSH / ID_RSA.PUB
Vous ne pouvez pas spécifier de mot de passe sur SSH / SCP ou SFTP à partir de la ligne de commande. Le seul moyen de se connecter sans demander à un mot de passe est d'utiliser l'authentification de clé publique. P>
Vous dites que vous ne pouvez pas ne pas SSH sur le serveur pour modifier les fichiers de configuration, mais si vous utilisez SFTP sur le serveur, vous pouvez probablement télécharger votre clé publique. P>
Votre clé publique doit simplement passer sous le répertoire .sSH de votre répertoire de domicile. P>
"Si vous pouvez également télécharger votre clé publique". Nop. Vous serez peut-être surpris à quel point le cas est courant lorsque vous ne pouvez pas télécharger les clés
LFTP permet de spécifier des mots de passe pour FTP et SFTP et ne nécessite pas du tout des clés publiques. Votre script SH Sync peut ressembler à ceci:
#!/bin/sh # Define folders THEFOLDER='/mnt/my/folder' # List files THEFILES=`ls -p $THEFOLDER | grep -v "/"` for file in $THEFILES do echo "Processing $file" lftp -u login,password -e "put $THEFOLDER/$file;quit" theftp/sub/folder done
CURL peut prendre en charge SFTP, comme documenté par Le manuel :
USING PASSWORDS FTP To ftp files using name+passwd, include them in the URL like: curl ftp://name:passwd@machine.domain:port/full/path/to/file or specify them with the -u flag like curl -u name:passwd ftp://machine.domain:port/full/path/to/file FTPS It is just like for FTP, but you may also want to specify and use SSL-specific options for certificates etc. Note that using FTPS:// as prefix is the "implicit" way as described in the standards while the recommended "explicit" way is done by using FTP:// and the --ftp-ssl option. SFTP / SCP This is similar to FTP, but you can specify a private key to use instead of a password. Note that the private key may itself be protected by a password that is unrelated to the login password of the remote system. If you provide a private key file you must also provide a public key file.
mettre dans un fichier appelé Pour que cela fonctionne: P> Il doit vous déposer dans la commande SFTP sans vous demander un mot de passe. p> est-ce non sécurisé? strong> p> Il s'agit de la commande la plus non sécurisée que vous puissiez exécuter. Il expose le mot de passe à l'historique de Commandline, à quiconque qui peut lire la sortie 'PS' et vaincre essentiellement le but total des mots de passe ensemble. P> Mais hey qu'est-ce qui est un autre journal sur le feu de fraude, il ne s'agit que d'environ 250 milliers de dollars chez les victimes pertes par an. Passons à 500b. p> sftp_aulogin.sh . Le
\ r code> envoie un à SFTP pour exécuter la commande. Je n'inclut pas le «P» dans le mot de passe parce que sur certains systèmes, il est majuscule, d'autres minuscules. Attendez-vous à ce que la commande SFTP. Attend la chaîne 'EcuWrork' à voir et envoie une commande. Puis se termine. P>
#!/bin/bash
expect -c "
spawn sftp myuser@myserver.com
expect \"assword\"
send \"yourpassword\r\"
expect \"sftp\"
send \"get your_directory/yourfilename.txt\r\"
expect \"sftp\"
send \"exit\r\"
interact "
Vous pouvez également envisager d'utiliser Python (le module Paramiko), car il peut être appelé rapidement à partir de la coque.