J'ai besoin de transférer un fichier journal vers un hôte distant en utilisant sftp à partir d'un hôte Linux. J'ai reçu des informations d'identification pour la même chose de mon groupe d'opérations. Cependant, comme je n'ai pas de contrôle sur un autre hôte, je ne peux pas générer et partager des clés RSA avec l'autre hôte.
Existe-t-il donc un moyen d'exécuter la sftp
commande (avec le nom d'utilisateur / mot de passe fourni) à partir du script Bash via une tâche cron ?
J'ai trouvé une question similaire de Stack Overflow, Spécifiez le mot de passe pour sftp dans un script Bash , mais il n'y avait pas de réponse satisfaisante à mon problème.
SSHPASS=password sshpass -e ...
devrait faire.sshpass -p "my_password" sftp -oPort=9999 user@host:dir/file.log
-oBatchMode=no
était la pièce manquante cruciale pour moi.Une autre façon serait d'utiliser lftp:
L'inconvénient de cette méthode est que les autres utilisateurs de l'ordinateur peuvent lire le mot de passe à partir d'outils tels
ps
que et que le mot de passe peut faire partie de l'historique de votre shell.Une alternative plus sécurisée disponible depuis LFTP 4.5.0 consiste à définir la
LFTP_PASSWORD
variable d'environnement et à exécuter lftp avec--env-password
. Voici un exemple complet:LFTP comprend également une fonction de mise en miroir cool (peut inclure la suppression après le transfert confirmé
--Remove-source-files
):la source
put-script
: puisopen sftp://user:password@host; put local-file.name; exit
exécutez Delftp -f put-script
cette façon, vous n'avez pas besoin d'avoir le nom d'utilisateur et le mot de passe dans une ligne de commande et pouvez configurer des autorisations restrictives sur votre fichier de script.lftp
que de jouer avecsftp
etsshpass
. Bonne réponse.Expect est un excellent programme à utiliser.
Sur Ubuntu, installez-le avec:
Sur une machine CentOS, installez-le avec:
Disons que vous souhaitez établir une connexion à un serveur sftp, puis télécharger un fichier local de votre machine locale vers le serveur sftp distant
Cela ouvre une connexion sftp avec votre mot de passe au serveur.
Ensuite, il va dans le répertoire où vous souhaitez télécharger votre fichier, dans ce cas "logdirectory"
Cela télécharge un fichier journal à partir du répertoire local trouvé dans / var / log / avec le nom de fichier file.log vers le «répertoire journal» sur le serveur distant
la source
Vous pouvez utiliser lftp de manière interactive dans un script shell afin que le mot de passe ne soit pas enregistré dans .bash_history ou similaire en procédant comme suit:
Ajoutez ce qui suit à votre fichier:
Et écrivez / quittez l'éditeur vi après avoir modifié l'hôte, l'utilisateur, le mot de passe et le répertoire pour votre saisie de fichier put.
:wq
Ensuite, rendez votre script exécutablechmod +x test_script.sh
et exécutez-le./test_script.sh
.la source
On m'a récemment demandé de passer de ftp à sftp, afin de sécuriser la transmission des fichiers entre les serveurs. Nous utilisons le package Tectia SSH, qui a une option
--password
pour passer le mot de passe sur la ligne de commande.exemple :
sftp --password="password" "userid"@"servername"
Exemple de lot:
J'ai pensé que je devrais partager ces informations, car je regardais divers sites Web, avant d'exécuter la commande help (
sftp -h
), et j'ai été surpris de voir l'option de mot de passe.la source
ps
commande pourra voir votre mot de passe.unknown option -- - usage: sftp [-1246aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher] [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-R num_requests] [-S program] [-s subsystem | sftp_server] host sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] sftp -b batchfile [user@]host
Vous pouvez remplacer en activant l'authentification sans mot de passe. Mais vous devriez installer les clés (pub, priv) avant de vous lancer.
Exécutez les commandes suivantes sur le serveur local.
Appuyez sur ENTRÉE pour toutes les options demandées. Aucune valeur ne doit être saisie.
Connectez-vous au serveur distant à l'aide de la commande suivante
Exécutez les commandes suivantes sur le serveur distant
Exécutez la commande suivante sur le serveur local pour tester l'authentification sans mot de passe. Il doit être connecté sans mot de passe.
la source
lftp -p ${port} -u ${login_id},${password} ${ip_number}
invoquée depuis un script shell les affichera-t- elle quelque part? Comment avez-vous résolu en dehors de sshpass?lftp
et je compte sursshpass
Mac et Linux à la fois.Combinez sshpass avec un fichier d'informations d'identification verrouillé et, dans la pratique, c'est aussi sécurisé que n'importe quoi - si vous avez root sur la boîte pour lire le fichier d'informations d'identification, tous les paris sont de toute façon ouverts.
la source
Programme Bash pour attendre que sftp demande un mot de passe, puis envoyez-le:
Vous devrez peut-être installer attendez, changez le libellé de «Mot de passe» en minuscule «p» pour correspondre à ce que votre invite reçoit. Le problème ici est qu'il expose votre mot de passe en texte brut dans le fichier ainsi que dans l'historique des commandes. Ce qui va presque à l'encontre de l'objectif d'avoir un mot de passe en premier lieu.
la source
Vous pouvez utiliser sshpass pour cela. Voici les étapes
sudo apt-get install sshpass
sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps
la source