Je crée un petit script de sauvegarde en utilisant sshfs
:
sshfs backup_user@target_ip:/home /mnt/backup
Existe-t-il un moyen d'inclure le mot de passe dans cette commande?
Ou existe-t-il une autre solution de transfert de fichiers où le mot de passe de connexion peut être inclus autre que FTP/SFTP?
-o password_stdin
ne semble pas fonctionner sur tous les systèmes, par exemple freeBSD. etc.
Vous pouvez également utiliser l'interpréteur expect
, il devrait fonctionner avec sshfs et devrait faire l'affaire.
Une autre solution serait sshpass
, par exemple, disons que vous sauvegardez le répertoire/var/www
Sauvegarde:
name=$(date '+%y-%m-%d')
mkdir /backup/$name && tar -czvf /backup/$name/"$name.tar.gz" /var/www
téléchargement du fichier de sauvegarde sur le serveur de sauvegarde
sshpass -p "your_password" scp -r backup_user@target_ip:/home/ /backup/$name
Il va donc télécharger le répertoire avec la sauvegarde d'aujourd'hui
Mais toujours, comme on l'a dit plus haut, la meilleure façon (sûre et simple) serait d'utiliser la paire de clés ssh
. ),
Génération correcte d'une paire de clés
Sur le serveur local
ssh-keygen -t rsa
Sur un serveur distant
ssh root@remote_servers_ip "mkdir -p .ssh"
Téléchargement des clés publiques générées sur le serveur distant
cat ~/.ssh/id_rsa.pub | ssh root@remote_servers_ip "cat >> ~/.ssh/authorized_keys"
Définir les autorisations sur le serveur distant
ssh root@remote_servers_ip "chmod 700 ~/.ssh; chmod 640 ~/.ssh/authorized_keys"
S'identifier
ssh root@remote_servers_ip
Activation du protocole SSH v2
décommentez "Protocol 2" dans/etc/ssh/sshd_config
activation de l'autorisation de clé publique dans sshd
décommentez "PubkeyAuthentication yes" dans/etc/ssh/sshd_config
Si StrictModes est défini sur yes dans/etc/ssh/sshd_config,
restorecon -Rv ~/.ssh
Selon le manuel, il existe une option -o password_stdin
qui pourrait permettre de lire le mot de passe à partir de l'entrée standard, qui peut probablement être une redirection. Je ne l'ai jamais utilisé, donc je spécule.
Cela dit, je déconseille fortement une telle solution qui est intrinsèquement précaire.
ssh
fonctionne très bien avec un système de clés privées/publiques. C'est simple et sécurisé. Pas besoin d'entrer un mot de passe ou de l'écrire en clair dans un script Shell. Appuyez simplement sur votre clé publique sur le serveur et vous pouvez vous connecter immédiatement.
Tuyauter le 'sshfs password'
avec <<<
à -o password_stdin
fonctionne sur bash:
sshfs -o password_stdin backup_user@target_ip:/home /mnt/backup <<< 'sshfs password'
echo 'password' | sshfs user@Host:/dir /mnt -o password_stdin
L'option "-o password_stdin" est ce qui vous permet de diriger votre mot de passe.
Cela dit, les clés sont une meilleure option, sauf si votre fournisseur de services ne vous autorise pas à les utiliser pour sftp. (Il s'agit de l'un des échecs notables de WP Engine.)
une chose à garder à l'esprit est que si vous utilisez le -o password_stdin
, il peut sembler ne pas fonctionner car sshfs vous demandera de vous connecter ou non à l'hôte (si c'est la première fois que vous vous y connectez et qu'il n'est pas encore ajouté au fichier d'hôtes connu). Si vous l'exécutez dans un lot, vous ne verrez jamais sshfs demander. Les solutions de contournement pour éviter cela sont les suivantes:
-o StrictHostKeyChecking=no
option pour sshfs ouScript de montage:
#!/bin/bash
server=<Host>
user=<username>
pass=<password>
root=<hostpath>
mount=$(pwd)/sshfs
type sshfs >/dev/null 2>&1 || { echo >&2 "sshfs required"; exit 1; }
type sshpass >/dev/null 2>&1 || { echo >&2 "sshpass required"; exit 1; }
mkdir -p $mount
SSHPASS="$pass" sshfs $server:$root $mount -o ssh_command="sshpass -e ssh -l $user"
Démonter:
#!/bin/bash
mount=$(pwd)/sshfs
fusermount -u $mount
Script automatique pour connecter sftp avec sshfs
#!/bin/bash
expect <<END
spawn sshfs sftpuser@ip:/folder /mnt/folder -p 22 -o password_stdin
send "password\r"
expect eof
END