it-swarm.com.de

Benutzername und Passwort in der Kommandozeile mit sshfs

Ich erstelle ein kleines Backup-Skript mit sshfs:

sshfs [email protected]_ip:/home /mnt/backup

Gibt es eine Möglichkeit, das Passwort in diesen Befehl aufzunehmen?

Oder gibt es eine andere Dateiübertragungslösung, bei der das Anmeldekennwort anders als FTP/SFTP enthalten sein kann?

15
Zaza

-o password_stdin scheinen nicht auf allen Systemen zu funktionieren, zum Beispiel freeBSD. usw.

Sie können auch expect Interpreter verwenden, es sollte mit sshfs funktionieren und den Trick machen.

Eine andere Lösung wäre sshpass. Nehmen wir beispielsweise an, Sie sichern das Verzeichnis/var/www

Sichern:

name=$(date '+%y-%m-%d')
mkdir /backup/$name && tar -czvf /backup/$name/"$name.tar.gz" /var/www

hochladen der Sicherungsdatei auf den Sicherungsserver

sshpass -p "your_password" scp -r [email protected]_ip:/home/ /backup/$name

Es wird also ein Verzeichnis mit dem heutigen Backup hochgeladen

Aber Dennoch, wie es höher gesagt wurde, wäre der beste (sichere und einfache) Weg, das SSH-Schlüsselpaar zu verwenden
Die einzige Unannehmlichkeit besteht darin, dass Sie den Schlüsselgenerierungsprozess auf jedem Server, den Sie koppeln müssen, einmal durchlaufen müssen. Es ist jedoch besser, als auf allen Servern, die Sie sichern möchten, ein Kennwort im Nur-Text-Format zu führen: ),

Ein Schlüsselpaar auf die richtige Weise generieren

  • Auf lokalem Server

    ssh-keygen -t rsa
    
  • Auf dem Remote-Server

    ssh [email protected]_servers_ip "mkdir -p .ssh"
    
  • Hochladen generierter öffentlicher Schlüssel auf den Remote-Server

    cat ~/.ssh/id_rsa.pub | ssh [email protected]_servers_ip "cat >> ~/.ssh/authorized_keys"
    
  • Festlegen von Berechtigungen auf dem Remote-Server

    ssh [email protected]_servers_ip "chmod 700 ~/.ssh; chmod 640 ~/.ssh/authorized_keys"
    
  • Anmeldung

    ssh [email protected]_servers_ip
    
  • Aktivieren des SSH-Protokolls v2

    Kommentar "Protokoll 2" in/etc/ssh/sshd_config auskommentieren

  • aktivieren der Autorisierung öffentlicher Schlüssel in sshd

    Kommentar "PubkeyAuthentication yes" in/etc/ssh/sshd_config

  • Wenn StrictModes in/etc/ssh/sshd_config auf yes gesetzt ist, dann

    restorecon -Rv ~/.ssh
    
12
user209328

Laut Handbuch gibt es eine Option -o password_stdin, mit dem das Kennwort möglicherweise von der Standardeingabe gelesen werden kann. Dies kann wahrscheinlich eine Umleitung sein. Ich habe es nie benutzt, also spekuliere ich.

Trotzdem rate ich dringend von einer solchen Lösung ab, die von Natur aus unsicher ist.

ssh funktioniert sehr gut mit einem System von privaten/öffentlichen Schlüsseln. Es ist einfach und sicher. Es ist nicht erforderlich, ein Kennwort einzugeben oder es in einem Shell-Skript klar zu schreiben. Drücken Sie einfach Ihren öffentlichen Schlüssel auf den Server und Sie können sofort eine Verbindung herstellen.

15
xhienne

Piping the 'sshfs password' mit <<< bis -o password_stdin arbeitet an Bash:

sshfs -o password_stdin [email protected]_ip:/home /mnt/backup <<< 'sshfs password'
12
Maz
echo 'password' | sshfs [email protected]:/dir /mnt -o password_stdin

Mit der Option "-o password_stdin" können Sie Ihr Passwort weiterleiten.

Allerdings sind Schlüssel eine bessere Option, es sei denn, Ihr Dienstanbieter lässt Sie nicht für SFTP verwenden. (Dies ist einer der bemerkenswerten Fehler von WP Engine).)

7
iateadonut

eine Sache, die Sie beachten sollten, ist, dass, wenn Sie das -o password_stdin Option, es scheint möglicherweise nicht zu funktionieren, da sshfs fragt, ob eine Verbindung zum Host hergestellt werden soll oder nicht (wenn Sie zum ersten Mal eine Verbindung zum Host herstellen und diese noch nicht zur bekannten Hosts-Datei hinzugefügt wurde). Wenn Sie es in einem Stapel ausführen, werden Sie nie sshfs fragen sehen. Problemumgehungen, um dies zu vermeiden, sind:

  1. ergänzen Sie die -o StrictHostKeyChecking=no Option zu sshfs oder
  2. führen Sie sshfs einmal manuell aus, um den Host zur bekannten Hosts-Datei hinzuzufügen
2
frenchie71

Mount-Skript:

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

Unmount:

#!/bin/bash

mount=$(pwd)/sshfs

fusermount -u $mount
2
Michael

Automatisches Skript zur Verbindung von SFTP mit SSHFS

#!/bin/bash
expect <<END
spawn sshfs [email protected]:/folder /mnt/folder -p 22 -o password_stdin
send "password\r"
expect eof
END
0
champa