michahe
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 810
|
Hallo, ich habe ein lokales Netzlaufwerk mit etx4-Festplatte. Auf das Gerät kann ich problemlos per FileZilla oder Dolphin (mit "leerem" Passwort (=ENTER)) problemlos zugreifen und erhalte auch einen ssh-Zutritt:
$ ping 10.11.30.25
PING 10.11.30.25 (10.11.30.25) 56(84) bytes of data.
64 bytes from 10.11.30.25: icmp_seq=1 ttl=64 time=1.94 ms
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
$ ssh root@10.11.30.25
Welcome on your Device
root@DeviceName:~# Nun möchte ich das Verzeichnis nach /home/BenutzerName mounten und habe dort ein Verzeichnis DeviceName angelegt. Da der sshfs-Befehl mit Fehlermeldung "remote host has disconnected" abbricht, habe ich auch einen Debug-Output erzeugt:
sshfs -odebug,sshfs_debug,loglevel=debug root@10.11.30.25:/media/hdd/Backup /home/BenutzerName/DeviceName
SSHFS version 2.8
FUSE library version: 2.9.7
nullpath_ok: 0
nopath: 0
utime_omit_ok: 0
executing <ssh> <-x> <-a> <-oClearAllForwardings=yes> <-ologlevel=debug> <-2> <root@10.11.30.25> <-s> <sftp>
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 10.11.30.25 [10.11.30.25] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/hessler/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/hessler/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/hessler/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/hessler/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/hessler/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/hessler/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/hessler/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/hessler/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
debug1: Remote protocol version 2.0, remote software version dropbear_2014.66
debug1: no match: dropbear_2014.66
debug1: Authenticating to 10.11.30.25:22 as 'root'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256@libssh.org
debug1: kex: host key algorithm: ssh-rsa
debug1: kex: server->client cipher: aes128-ctr MAC: hmac-sha1 compression: none
debug1: kex: client->server cipher: aes128-ctr MAC: hmac-sha1 compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ssh-rsa SHA256:udNlotHC8km3Im2Fh18n8ICuXo5eL15T/5s52bbB7pw
debug1: Host '10.11.30.25' is known and matches the RSA host key.
debug1: Found key in /home/hessler/.ssh/known_hosts:1
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentication succeeded (none).
Authenticated to 10.11.30.25 ([10.11.30.25]:22).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: pledge: network
debug1: Sending environment.
debug1: Sending env LANG = de_DE.UTF-8
debug1: Sending subsystem: sftp
sh: /usr/lib/openssh/sftp-server: not found
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 1744, received 1496 bytes, in 0.0 seconds
Bytes per second: sent 156947.8, received 134629.5
debug1: Exit status 127
remote host has disconnected
$ Was will mir diese Ausgabe sagen bzw. wie gestalte ich das Mounten erfolgreich? Vielen Dank, Michael.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
michahe schrieb: sh: /usr/lib/openssh/sftp-server: not found
apt-get install openssh-sftp-server
|
michahe
(Themenstarter)
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 810
|
Danke misterunknown, Mist² für mich: Erstens, dass ich die Zeile apt-get install openssh-sftp-server
schlicht übersehen habe, zweitens dass ich auf dem Gerät keinen sftp-server installieren kann: Verfügbar sind dropbear (SSH des Gerätes) und vsftp (FTP-Server des Gerätes), beide können kein SFTP. proftpd und OpenSSH können das, sind aber nicht als Paket für das Gerät verfügbar. Gibt es noch einen anderen, einfacheren Weg als curlftpfs, im Terminal einfache Befehle wie ls, diff etc. auf das Geräteverzeichnis loszulassen?. Hintergrund: Auf dem Gerät ist ein Backup, das signifikant mehr Dateien aufweist als das Original; ich möchte finden, wo diese sind: Ich brauche das wahrscheinlich einmalig und nur für den Vergleich, Try and Error war nicht erfolgreich ... Nun habe ich mich per ssh auf dem Gerät eingeloggt und mit ls -laR > ListDir.txt eine Textdatei erstellt und mit dieser eine erste Ursache gefunden. Zur Not mach' ich das so.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
michahe schrieb: Gibt es noch einen anderen, einfacheren Weg als curlftpfs, im Terminal einfache Befehle wie ls, diff etc. auf das Geräteverzeichnis loszulassen?.
Verstehe ich nicht, um ls, diff etc. auszuführen, kannst du doch einfach SSH nehmen!?
Nun habe ich mich per ssh auf dem Gerät eingeloggt und mit ls -laR > ListDir.txt eine Textdatei erstellt und mit dieser eine erste Ursache gefunden. Zur Not mach' ich das so.
Das ist das einfachste für eine einmalige Aktion. Abgesehen davon ist es sinnvoll über Monitoring nachzudenken. Dann wirst du informiert wenn die Platte voll läuft, und kannst im Verlauf auch sehen, wann der Zuwachs gekommen ist, und ob das plötzlich kam, oder ein stetiges Wachstum ist.
|
michahe
(Themenstarter)
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 810
|
Danke misterunknown, aber Gibt es noch einen anderen, einfacheren Weg als curlftpfs, im Terminal einfache Befehle wie ls, diff etc. auf das Geräteverzeichnis loszulassen?.
Verstehe ich nicht, um ls, diff etc. auszuführen, kannst du doch einfach SSH nehmen!?
SSH funktioniert doch nicht, weil ich auf dem Gerät apt-get install openssh-sftp-server nicht ausführen kann, siehe hier. Wenn es doch einen einfachen, praktikablen Weg gibt, würde ich den gerne lernen. Inzwischen habe ich nämlich eine "diff.sh" gebastelt, die mir auch für große Dateianzahlen (im Gegensatz zu Meld etc.) ein Backup mit dem Original vergleicht und Unterschiede auflistet. Das funktioniert fein mit angeschlossenem USB-Laufwerk, nicht aber mit dieser (Netzwerk-)Geräte-Platte.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
michahe schrieb: SSH funktioniert doch nicht
Du hast geschrieben: ... und erhalte auch einen ssh-Zutritt
Entscheide dich mal.
weil ich auf dem Gerät apt-get install openssh-sftp-server nicht ausführen kann
Das eine hat mit dem anderen nichts zu tun. Du brauchst keinen SFTP-Server für SSH.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
michahe schrieb: Wenn es doch einen einfachen, praktikablen Weg gibt, würde ich den gerne lernen.
Du kannst per SSH beliebige Befehle auf dem Zielrechner ausführen lassen und deren Ausgabe auf stdout und stderr wird an den Client weitergereicht (wo man sie in eine Datei umleiten oder an lokal ausgeführte Befehle weiterreichen kann)- vgl. SSH (Abschnitt „Der-SSH-Client“), also z.B. um den Inhalt eines bestimmten Verzeichnisses mit ls zu listen oder zwei (Text-)Dateien zu vergleichen (solange du dich mit Public Key anmeldest und der Schlüssel für den ssh-agent entsperrt wurde):
ssh root@10.11.30.25 'ls -lR /media/hdd/Backup'
diff -Nu myfile <(ssh root@10.11.30.25 'cat /media/hdd/Backup/myfile')
|
michahe
(Themenstarter)
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 810
|
Sorry misterunknown, ich wollte Dich bestimmt nicht ärgern! Ja, der ssh-Zugang zur Platte des Gerätes funktioniert und ich kann dort z.B. 'ls' ausführen.
Den Befehl apt-get install openssh-sftp-server kann ich auf dem Gerät nicht ausführen; den sftp-Server hatten wir aus der ursprünglichen Fehlermeldung sh: /usr/lib/openssh/sftp-server: not found abgeleitet. Soll openssh-sftp-server auf dem kUBUNTU-PC installiert werden?
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
michahe schrieb: Ja, der ssh-Zugang zur Platte des Gerätes funktioniert und ich kann dort z.B. 'ls' ausführen.
Na das passt doch 👍
Soll openssh-sftp-server auf dem kUBUNTU-PC installiert werden?
Nein, wozu solltest du SFTP brauchen? Geh einfach per SSH auf die Hütte und gucke mit ls , find , du , etc. wo die Daten liegen und wie groß was ist 😉 Selbst diff sollte auf dem System vorhanden sein.
|
michahe
(Themenstarter)
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 810
|
Danke seahawk1986 und misterunknown, ls und find und du auf der Geräte-Platte auszuführen, das schaffe ich; immerhin. Auch diff wäre vorhanden ... Bei seahawk1986's Vorschlag wird mir schwindlig mit den Begriffen: per SSH beliebige Befehle auf dem Zielrechner ausführen lassen und deren Ausgabe auf stdout und stderr wird an den Client weitergereicht (wo man sie in eine Datei umleiten oder an lokal ausgeführte Befehle weiterreichen kann)
Von " Public Key" und "Schlüssel für den ssh-agent" ganz zu schweigen. Sorry, meine Netzwerk-Kenntniss sind schlechter als mangelhaft. Ich habe
Auf der Geräteplatte ist ein rsync-Backup des PC und ich möchte beide (auch zur Übung und zum Lernen von rsync) vergleichen. Das gelingt mir mit einem ebensolchen Backup auf einer USB-Festplatte (ext4), weil die USB-Platte gemounted ist:
Verzeichnis[1]="/etc/" # lokales Verzeichnis
Verzeichnis[2]="/media/BenutzerName/myBook8/Backup/X240/grSync/etc/" # dieses Verzeichnis im Backup
# FEHLER Verzeichnis[7]="/etc"
# FEHLER Verzeichnis[8]="smb://@GeräteName.local:445/Harddisk/Backup/X240/grSYNC/etc"
# FEHLER Verzeichnis[8]="ftp://root@GeräteName:21/media/hdd/Backup/X240/grSYNC/etc/"
AusgabeDatei=Unterschiede.txt
for (( i=1; i<=2; i=i+2 )); do # MAX-Anzahl wie oben gelistet
echo "Original: ${Verzeichnis[i]} Backup: ${Verzeichnis[i+1]}"
sudo diff -rq ${Verzeichnis[i]} ${Verzeichnis[i+1]} 2>&1 | tee -a $AusgabeDatei
done
Mit der Geräteplatte schaffe ich das nicht, siehe FEHLER-Zeilen. Das eigentliche Problem auf der Geräteplatte habe ich mit ssh und ls und Try-and-Error inzwischen behoben; da mein Ziel ist, die USB-Platte durch Netzwerkplatten zu ersetzen, wäre eine Lösung für Netzwerk-Geräte für mich ein Fortschritt.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
michahe schrieb: Ich habe
Auf der Geräteplatte ist ein rsync-Backup des PC und ich möchte beide (auch zur Übung und zum Lernen von rsync) vergleichen.
Wenn du wissen willst
kannst du rsync nutzen - schau dir z.B. die ausführliche Erklärung und das Beispielskript in https://unix.stackexchange.com/a/463214 an. Wenn die Unterschiede zwischen zwei Dateien angezeigt werden sollen, bietet sich diff (oder z.B. vbindiff aus dem gleichnamigen Paket für Binärdateien) an. Damit man wie in meinem vorherigen Post gezeigt SSH nicht-interaktiv nutzen kann, versuche ich noch ein bisschen auszuholen:
Bei seahawk1986's Vorschlag wird mir schwindlig mit den Begriffen: per SSH beliebige Befehle auf dem Zielrechner ausführen lassen und deren Ausgabe auf stdout und stderr wird an den Client weitergereicht (wo man sie in eine Datei umleiten oder an lokal ausgeführte Befehle weiterreichen kann)
Von " Public Key" und "Schlüssel für den ssh-agent" ganz zu schweigen. Sorry, meine Netzwerk-Kenntniss sind schlechter als mangelhaft.
Mit dem Befehl ssh kannst du eine Verbindung zu einem SSH-Server auf dem Zielrechner aufbauen. Derjenige, der sich mit einem Server verbindet, wird als Client bezeichnet. Statt einer interaktiven Shell kannst du ssh auch Befehle mitgeben und die SSH-Verbindung wird beendet, sobald die ausgeführt wurden. SSH verarbeitet wie viele andere CLI-Programme auch die in Shell/Umleitungen beschrieben Ein- und Ausgabekanäle, von denen es lesen (stdin) bzw. auf die es schreiben kann (stdout und stderr) und man kann diese Kanäle über Umleitungen miteinander verbinden und Daten von einem Programm an ein anderes weiterreichen (so wie du in deinem Skript z.B. die Ausgabe von diff auf stdout und stderr zusammenführst und per Pipe an tee weiterreichst). SSH reicht den stdin an ein entfernt aufgerufenes Programm weiter und liefert stdout und stderr zurück. Die Authentifizierung über Public Keys wird im Wiki beschrieben. Dabei wird eine asymmetrische Verschlüsselung genutzt. Man kopiert seinen öffentlichen Schlüssel vorab auf den Server. Wenn der Client sich mit dem Server verbindet, verschlüsselt der Server eine Nachricht mit dem öffentlichen Schlüssel und sendet sie an den Client. Der Client kann diese Nachricht mit dem privaten Schlüssel entschlüsseln und sich damit gegenüber dem Server authentifizieren und die die Verbindung aushandeln. Da man den privaten Schlüssel normalerweise mit einem Passwort schützt, aber nicht ständig das Passwort eingeben will, wenn man ihn verwenden will, kann man einen SSH-Agent einspannen, der den Schlüssel in einer ohne Passworteingabe nutzbaren Form für eine einstellbare Zeit vorhält, nachdem man es eingegeben hat. Dadurch kann man ssh in Shell-Befehlen nutzen, auch wenn eine interaktive Passwortabfrage nicht möglich ist.
|