web-dev-qa-db-fra.com

Nom d'utilisateur et mot de passe en ligne de commande avec sshfs

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?

15
Zaza

-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
    
12
user209328

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.

15
xhienne

Tuyauter le 'sshfs password' avec <<< à -o password_stdin fonctionne sur bash:

sshfs -o password_stdin backup_user@target_ip:/home /mnt/backup <<< 'sshfs password'
12
Maz
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.)

7
iateadonut

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:

  1. ajouter le -o StrictHostKeyChecking=no option pour sshfs ou
  2. exécutez sshfs manuellement une fois pour ajouter l'hôte au fichier d'hôtes connu
2
frenchie71

Script 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
2
Michael

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
0
champa