## [[Vorlage(Ausbaufähig, "Verwendung als Hilfe bei Problemen, Handling der cifs-UNIX-Extensions, Hinweise auf verwandte Konsolen-Befehle (z.B. `smbtree`), Analyse gängiger Fehlermeldungen, Links")]] [[Vorlage(Getestet, bionic, focal)]] {{{#!vorlage Wissen [:Terminal:Ein Terminal öffnen] [:Samba:Grundlagen über Samba] [:FTP:FTP auf der Konsole] (optional) }}} [[Inhaltsverzeichnis(2)]] [[Bild (Samba_Server/samba-logo.png, align=left)]] '''smbclient''' ist ein Konsolenclient für [:Samba#SMB:SMB/CIFS]-Freigaben. Damit ist auch ein Zugriff auf Freigaben möglich, ohne diese in das Dateisystem einhängen zu müssen. Ursprünglich als Test- und Debugging-Tool konzipiert, ist smbclient auch zu einer universellen [:Shell:] geworden, deren Befehlsvorrat dem von ftp[3] vergleichbar ist. smbclient ist oft die erste Hilfe, wenn mit [:Samba:] Probleme auftreten. Es ist aber auch dann von Vorteil, wenn man nur schnell und unkompliziert auf der Konsole eine Datei von Samba oder Windows hoch- oder herunterladen möchte. Oder einfach, wenn man allgemein dem direkten Weg mit Konsole oder Terminal den Vorzug vor aufwändigen grafischen Hilfsprogrammen gibt. Die wichtigsten Operationen, die sich mit smbclient ausführen lassen, sind: * Suche und Beseitigen von Fehlern * Übermitteln von Kommandos an einen Server * Interaktiver Datenaustausch (ähnlich ftp) * Interaktives Drucken mit über Samba freigegebenen Druckern * Austausch von Nachrichten im Netzwerk Grob lässt sich die Anwendung von smbclient in zwei Bereiche einteilen: 1. Eingabe und Übermittlung von Kommandos 1. Arbeiten mit einer Freigabe (Share) über die smbclient-Shell Es würde den Rahmen eines Wiki-Artikels sprengen, auf alle Optionen und Befehle von smbclient einzugehen. Deshalb werden hier nur einige gängige Beispiele aufgeführt. Hinweis: Der Begriff Samba Server wird im folgenden als Synonym für Freigaben des cifs Protokolls verwendet. = Installation = smbclient befindet sich im Paket {{{#!vorlage Paketinstallation smbclient }}} = Kommandos eingeben = Über smbclient lassen sich sowohl Kommandos an den Client selbst als auch an einen Samba Server übergeben. Die genaue Syntax variiert je nach Kommando, entspricht aber im Wesentlichen folgendem Schema: {{{#!vorlage Befehl # allgemein: smbclient Option Zusatzangabe # Beispiel: smbclient -L //IP-des-Servers/Daten smbclient -L //DNS-Hostname-des-Servers/Daten }}} Die Option legt das Kommando fest. Sie kann (wie üblich) in Kurz- oder Langform angegeben werden. Die Zusatzangabe kann ein Parameter und/oder der Adressat des Kommandos sein und ggf. noch weitere sekundäre Optionen enthalten. Manche Optionen sind auch nur in Verbindung mit anderen Kommandos möglich. Nach der Eingabe der Kommando-Zeile erfolgt eine verdeckte Abfrage des Samba-Passworts. Mit der Zusatzoption -N lässt sich die Passwort-Abfrage unterdrücken. Gibt man kein Passwort ein, dann wird das Kommando anonym übermittelt. Viele, aber nicht alle Kommandos können anonym ausgeführt werden. Nach der Ausführung des Kommandos kehrt smbclient automatisch wieder in die Linux-Shell zurück, was am Prompt zu erkennen ist. Im Folgenden werden einige häufig gebrauchte Kommandos beschrieben. == Informationen eines Samba Servers abfragen == {{{#!vorlage Hinweis Ab '''Samba 4.7.0''' / [:Bionic Beaver:] versucht '''smbclient''' die Verbindung im Dialekt SMB3_11 aufzubauen. Sofern der Samba Server nur Dialekte ab SMB2 akzeptiert, funktioniert das Browsing der Workgroup nicht mehr (`smbclient -L `) (Fehlermeldung: Failed to connect with SMB1 -- no workgroup available). Die Shares werden jedoch angezeigt. }}} Um die Freigaben (Shares) eines Samba Servers zu erfragen, kann folgender Befehl genutzt werden: {{{#!vorlage Befehl # allgemein: smbclient -L //Server # Beispiele: smbclient -L //notebook/ smbclient -L //192.168.1.111/ smbclient -N -L //notebook/ }}} Die Abfrage des Servers ist auch ohne Anmeldung (anonym) möglich. Unter Umständen sind dann aber nicht alle Freigaben zu sehen. Für den Server kann der Rechnername (netbios name) oder die IP angegeben werden. Man erhält dann eine Ausgabe folgender Art: {{{ # mit Serverseitig aktiviertem Dialekt SMB1: ubuntu@ubuntu:~$ smbclient -L localhost WARNING: The "syslog" option is deprecated Enter WORKGROUP\ubuntu's password: Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers demo Disk IPC$ IPC IPC Service (ubuntu server (Samba, Ubuntu)) Reconnecting with SMB1 for workgroup listing. Server Comment --------- ------- Workgroup Master --------- ------- WORKGROUP UBUNTU # ohne Serverseitig aktiviertem Dialekt SMB1: ubuntu@ubuntu:~$ smbclient -L localhost WARNING: The "syslog" option is deprecated Enter WORKGROUP\ubuntu's password: Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers demo Disk IPC$ IPC IPC Service (ubuntu server (Samba, Ubuntu)) Reconnecting with SMB1 for workgroup listing. protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE Failed to connect with SMB1 -- no workgroup available }}} == Anmeldung mit Benutzername und Kennwort == Mit der Option `-U` kann man sich persönlich anmelden. Das Kommando zur Anmeldung wird dem auszuführenden Kommando vorangestellt: {{{#!vorlage Befehl # allgemein: smbclient -U benutzername -L //Server # Beispiel: smbclient -U Simon -L //notebook/ }}} Der angegebene Benutzername muss nicht mit dem aktuellen Benutzernamen auf dem Client übereinstimmen, muss aber auf dem Server in der Samba-Benutzerdatenbank eingetragen sein (mittels `smbpasswd`). = Arbeiten mit der smbclient-Shell = Mit der Befehlszeile {{{#!vorlage Befehl # allgemein smbclient //Server/Freigabe # Beispiele smbclient //notebook/Daten smbclient //192.168.1.111/Daten }}} kann man sich mit einer Freigabe auf dem angegebenen Server verbinden und dort eine smbclient-Shell öffnen. Man erhält dann eine Ausgabe folgender Art: {{{ ubuntu@ubuntu:~$ smbclient //localhost/demo WARNING: The "syslog" option is deprecated Enter WORKGROUP\ubuntu's password: Try "help" to get a list of possible commands. smb: \> }}} Verzichtet man auf die Eingabe eines Passwortes, erfolgt die Anmeldung anonym, und man hat dann nur die Rechte, die bei der Freigabe einem Gast zukommen. Es ist aber auch möglich, sich mit Benutzername und Kennwort anzumelden: {{{#!vorlage Befehl smbclient -U Simon //notebook/Daten }}} Der Prompt `smb: \>` macht deutlich, dass Samba eine Verbindung zwischen Linux und Windows herstellen möchte. In der smbclient-Shell ist für Pfadnamen sowohl die Windows-Syntax mit Backslash (\) als auch die Linux-Syntax mit Slash (/) zulässig. == Häufig benutzte Shell-Befehle == * Folgende Befehle haben in der smbclient-Shell eine entsprechende Bedeutung wie in DOS oder in der Linux-Shell (Bash): `cd, del, dir, history, ls, md, mkdir, more, rd, rm, rmdir`. * `get entfernter-Dateiname [lokaler-Dateiname]`: kopiert eine Datei von der Freigabe auf den Client (Download). Fehlt die Angabe für `lokaler-Dateiname`, so wird der Dateiname beibehalten. * `put lokaler-Dateiname [entfernter-Dateiname]`: kopiert eine Datei vom Client auf die Freigabe (Upload). Fehlt die Angabe für `entfernter-Dateiname`, so wird der Dateiname beibehalten. * `setmode Dateiname [+|\-]rsha`: setzt DOS-Dateiattribute (wie DOS-Befehl `attrib`). * `exit, quit`: Rückkehr zur Linux-Shell (Bash). == Kopieren ganzer Ordner == Nach dem Verbinden auf die Freigabe folgende Befehle ausführen, um ganze Ordner zu kopieren: * `prompt` deaktiviert die Kopiernachfrage für jede Datei * `recurse` aktiviert das rekursive Durchsuchen von ganzen Ordnern * `mput [Ordnername]` zum Hochladen eines Ordners * `mget [Ordnername]` zum Herunterladen eines Ordners Ein erneutes Eingeben von `recurse` bzw. `prompt` stellt die Standardeinstellungen wieder her. ## Auskommentiert, da die cifs-Unix-Extensions nur für smb Version 1 gelten, diese aber als unsicher gilt. ## == Spezielle Befehle für die cifs-UNIX-Extensions == ## ## Werden sowohl vom Server als auch vom Client die [:Samba#Die-CIFS-UNIX-Erweiterungen:cifs-UNIX-Extensions] unterstützt (bei Windows-Servern nicht der Fall), dann lassen sich zusätzlich noch folgende Befehle verwenden: ## * `chown, chmod, stat`: wie Linux-Shell (Bash) ## * `getfacl Dateiname`: Ausgabe der Besitz- und Zugriffsrechte einer Datei ## * `link Quelle Ziel`: Erstellen eines Hardlinks auf dem Server ## * `symlink Quelle Ziel`: Erstellen eines symbolischen Links auf dem Server. ## {{{#!vorlage Hinweis ## Aus Gründen der Sicherheit sind in neueren Samba-Versionen Symlinks in Verbindung mit den UNIX-Extensions standardmäßig nicht mehr zugelassen. ## }}} == Besonderheiten der Syntax == === Leerzeichen in Namen oder Parametern === Weil in Dateipfaden wahlweise Slash (/) oder Backslash (\) zulässig sind, kann ein Backslash nicht - wie in Linux üblich - zum "Escapen" von Leerzeichen oder anderen besonderen Zeichen verwendet werden. Zeichenketten, die solche Zeichen enthalten, müssen deshalb in (doppelte) Anführungszeichen gesetzt werden (Beispiel: `cd \Daten\"neue Datei"`). === Syntaxfehler === Bei Syntaxfehlen verschiedener Art erfolgt in der smbclient-Shell meist die wenig informative Fehlermeldung {{{ Not enough '\' characters in service }}} Es lohnt sich, zu überlegen, ob der Fehler nicht vielleicht von ganz anderer Art ist. = Verwandte Befehle = Mit im Paket '''smbclient''' enthalten sind u. a. noch folgende Routinen: * `smbspool` - Sendet eine zu druckende Datei an einen Samba-Drucker * `smbtar` - Fügt Samba-Freigaben zu einem Archiv ("Tarball") hinzu. Lässt sich z.B. für Backup verwenden. ## Wenn man smbclient zur Fehlersuche und zum Beheben von Problemen einsetzt, benötigt man häufig noch weitere Informationen über das Netzwerk oder die Netzwerk-Verbindung. Hierbei sind folgende weiteren Befehle hilfreich, die ebenfalls im Paket '''smbclient''' enthalten sind: ## * `findsmb` - Gibt Informationen über die im Netzwerk vorhandenen Rechner und ihre Funktionen. Der Befehl ist in Samba-4 nicht mehr vorhanden; die Informationen sind auch in der Ausgabe von `smbtree` vorhanden. ## * `smbtree` - Gibt in einer Baumstruktur gegliedert Informationen über das Netzwerk aus. ## * `smbstatus` - Liefert Informationen über die momentan bestehenden Samba-Verbindungen. ## Ab Samba-4 muss der Befehl mit [:sudo:Root-Rechten] ausgeführt werden, sonst erfolgt die Fehlermeldung "''NT_STATUS_ACCESS_DENIED''". ## * `nmblookup` - Gibt Informationen über die Auflösung von Compunternamen (netbios names) in IP-Adressen (Syntax: `nmblookup [Optionen] netbios_name`). ## * `net` - ein sehr vielseitiges Administrations-Programm in der Art des gleichnamigen Windows-Programms. ## * `pdbedit` - Erlaubt es, die Samba-Benutzerdatenbank zu verwalten. Hierfür sind [:sudo:Root-Rechte] nötig. Mit `sudo pdbedit -L` werden z.B. alle registrierten Samba-Benutzer mit Username, UID und vollem Namen aufgelistet. Einzelheiten zu diesen Befehlen finden sich in den entsprechenden [:man:Manpages]. ## Nützlich sind oft auch die ''logfiles'', die sich im Verzeichnis '''/var/log/samba/''' befinden. = Links = * [https://www.samba.org/samba/docs/current/man-html/smbclient.1.html smbclient.1.html] {en} - Manpage in lesbarer Formatierung * [:FTP:] - ein Netzwerkprotokoll zur Übertragung von Dateien * [:Samba:] {Übersicht} Grundlegende Informationen mit vielen weiteren Links * [:mount.cifs:] - Einbinden von Windows- und Samba-Freigaben ins lokale Dateisystem * [:Samba Client GNOME:] – Einbinden von SMB-Freigaben mittels Dateimanager im GVfs #tag: Netzwerk, Shell, Samba, Konsole, SMB