<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://doc.expecco.de/index.php?action=history&amp;feed=atom&amp;title=Remote_Access%2F</id>
	<title>Remote Access/ - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://doc.expecco.de/index.php?action=history&amp;feed=atom&amp;title=Remote_Access%2F"/>
	<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Remote_Access/&amp;action=history"/>
	<updated>2026-06-06T00:30:25Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in expecco Wiki (Version 25.x)</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Remote_Access/&amp;diff=31291&amp;oldid=prev</id>
		<title>Sv: Die Seite wurde neu angelegt: „&#039;&#039;&#039;Fernzugriff&#039;&#039;&#039; bezeichnet die Möglichkeit, einen entfernten Rechner oder ein entferntes Netzwerk aus diesem expecco-Image heraus zu bedienen — Shells zu öffnen, Befehle abzusetzen, Dateien zu verschieben oder ein Testgerät anzusteuern.  Drei Protokoll-Familien sind unterstützt, in absteigender Empfehlungsreihenfolge:  * &#039;&#039;&#039;SSH und SFTP&#039;&#039;&#039; (empfohlen) — verschlüsselte Shell und sichere   Dateiübertragung über einen SSH-2-Tunnel.  Reine   Smal…“</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Remote_Access/&amp;diff=31291&amp;oldid=prev"/>
		<updated>2026-05-26T08:46:04Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „&amp;#039;&amp;#039;&amp;#039;Fernzugriff&amp;#039;&amp;#039;&amp;#039; bezeichnet die Möglichkeit, einen entfernten Rechner oder ein entferntes Netzwerk aus diesem expecco-Image heraus zu bedienen — Shells zu öffnen, Befehle abzusetzen, Dateien zu verschieben oder ein Testgerät anzusteuern.  Drei Protokoll-Familien sind unterstützt, in absteigender Empfehlungsreihenfolge:  * &amp;#039;&amp;#039;&amp;#039;SSH und SFTP&amp;#039;&amp;#039;&amp;#039; (empfohlen) — verschlüsselte Shell und sichere   Dateiübertragung über einen SSH-2-Tunnel.  Reine   Smal…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Fernzugriff&amp;#039;&amp;#039;&amp;#039; bezeichnet die Möglichkeit, einen entfernten&lt;br /&gt;
Rechner oder ein entferntes Netzwerk aus diesem expecco-Image heraus&lt;br /&gt;
zu bedienen — Shells zu öffnen, Befehle abzusetzen, Dateien zu&lt;br /&gt;
verschieben oder ein Testgerät anzusteuern.  Drei Protokoll-Familien&lt;br /&gt;
sind unterstützt, in absteigender Empfehlungsreihenfolge:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SSH und SFTP&amp;#039;&amp;#039;&amp;#039; (empfohlen) — verschlüsselte Shell und sichere&lt;br /&gt;
  Dateiübertragung über einen SSH-2-Tunnel.  Reine&lt;br /&gt;
  Smalltalk-Implementierung in &amp;lt;code&amp;gt;exept:libcrypt/ssh&amp;lt;/code&amp;gt;;&lt;br /&gt;
  keine externe Abhängigkeit von OpenSSL oder libssh.  Für alles&lt;br /&gt;
  mit Zugangsdaten oder sensiblen Nutzdaten.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Lokale Kommando-Shell&amp;#039;&amp;#039;&amp;#039; — fork + exec auf der lokalen&lt;br /&gt;
  Maschine.  Für die Anbindung lokaler Werkzeuge und für die&lt;br /&gt;
  lokale Seite eines hybriden Workflows.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Telnet&amp;#039;&amp;#039;&amp;#039; (veraltet) — Klartext-Terminalsitzung.  Keine&lt;br /&gt;
  Verschlüsselung, Passwörter im Klartext auf der Leitung.  Nur&lt;br /&gt;
  einsetzen, wenn die Gegenstelle keine Alternative bietet.&lt;br /&gt;
&lt;br /&gt;
= SSH und SFTP =&lt;br /&gt;
&lt;br /&gt;
Der SSH-Stack deckt das vollständige SSH-2-Protokoll ab&lt;br /&gt;
(RFC 4251–4254, RFC 5656, RFC 8709, RFC 8731) inklusive der&lt;br /&gt;
chacha20-poly1305-Transportchiffrierung von OpenSSH sowie das&lt;br /&gt;
SFTP-v3-Subsystem (draft-ietf-secsh-filexfer-02).  Zwei Schichten:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;SSH::Client&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; — programmatischer SSH-Zugriff&lt;br /&gt;
  (entferntes &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt;, TTY-Shell, Agent-Weiterleitung,&lt;br /&gt;
  ProxyJump-Bastion).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;SSH::SftpFilename&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; — eine&lt;br /&gt;
  &amp;lt;code&amp;gt;Filename&amp;lt;/code&amp;gt;-Unterklasse, die es dem restlichen ST/X&lt;br /&gt;
  erlaubt, einen entfernten SFTP-Pfad zu behandeln wie eine lokale&lt;br /&gt;
  Datei.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Abschnitte sind nutzeraufgaben-zuerst aufgebaut:&lt;br /&gt;
zuerst das, was der Anwender sieht und tut, darunter die&lt;br /&gt;
expecco-Bibliotheks-Anbindung, ganz unten Implementierungsdetails&lt;br /&gt;
für Interessierte.&lt;br /&gt;
&lt;br /&gt;
== Aus dem FileBrowserV2 ==&lt;br /&gt;
&lt;br /&gt;
Im Adress-Dropdown eine &amp;lt;code&amp;gt;sftp://&amp;lt;/code&amp;gt;-URL einfügen.  Der&lt;br /&gt;
Browser-Tab füllt sich wie bei einem lokalen Pfad.&lt;br /&gt;
Baum-Ausklappen, Spaltensortierung (Name / Größe / mtime),&lt;br /&gt;
Vorschau und Doppelklick zum Öffnen im Editor verhalten sich&lt;br /&gt;
normal.  Der erste Klick auf einen Host dauert ~200–500 ms&lt;br /&gt;
(TCP + KEX + Auth); folgende Klicks nutzen die gepoolte&lt;br /&gt;
Verbindung weiter.&lt;br /&gt;
&lt;br /&gt;
URL-Syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sftp://[user@]host[:port]/remote/path&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehlt &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt;, wird der lokale Login-Name verwendet, Port&lt;br /&gt;
ist standardmäßig 22, Pfad standardmäßig &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das Menü &amp;#039;&amp;#039;&amp;#039;Tools&amp;#039;&amp;#039;&amp;#039; im FileBrowserV2 bietet drei SSH-Aktionen,&lt;br /&gt;
sichtbar nur bei geladener SSH-Bibliothek:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Generate SSH Key Pair...&amp;#039;&amp;#039;&amp;#039; — öffnet den&lt;br /&gt;
  Schlüsselerzeugungs-Dialog, siehe&lt;br /&gt;
  [[#Einen SSH-Schlüssel erzeugen]] unten.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SSH Connect...&amp;#039;&amp;#039;&amp;#039; — öffnet ein interaktives VT100-Terminal&lt;br /&gt;
  zu einem entfernten Host.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SFTP Connect...&amp;#039;&amp;#039;&amp;#039; — navigiert diesen Browser-Tab über SFTP&lt;br /&gt;
  auf ein entferntes Dateisystem.&lt;br /&gt;
&lt;br /&gt;
== Aus expecco-Aktionen ==&lt;br /&gt;
&lt;br /&gt;
Das Expecco-RemoteAccess-Plugin&lt;br /&gt;
([[Expecco::RemoteAccessImportPlugin]]) stellt folgende Testaktionen&lt;br /&gt;
in der expecco-Aktionspalette bereit:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CmdShell - Open SSH Remote Connection&amp;#039;&amp;#039;&amp;#039; — öffnet eine&lt;br /&gt;
  SSH-Sitzung über das plattformeigene &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt;-Binary&lt;br /&gt;
  (PuTTYs &amp;lt;code&amp;gt;plink&amp;lt;/code&amp;gt; unter Windows).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CmdShell - Open SSH Remote Connection and PublicKey&amp;#039;&amp;#039;&amp;#039; —&lt;br /&gt;
  dasselbe, jedoch mit expliziter Public-Key-Authentifizierung.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: ein eingerichtetes Schlüsselpaar (privater&lt;br /&gt;
Schlüssel auf dieser Maschine, öffentlicher Teil in der&lt;br /&gt;
&amp;lt;code&amp;gt;~/.ssh/authorized_keys&amp;lt;/code&amp;gt; des Zielhosts).  Schlüssel&lt;br /&gt;
erzeugen entweder über den Dialog unten oder über&lt;br /&gt;
&amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das Plugin fügt zusätzlich eine Settings-Seite hinzu:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Extras → Settings → Plugins → Remote Access — SSH Keys&amp;#039;&amp;#039;&amp;#039; mit&lt;br /&gt;
einer einzelnen Schaltfläche &amp;#039;&amp;#039;&amp;#039;Generate SSH Key Pair...&amp;#039;&amp;#039;&amp;#039;, die&lt;br /&gt;
denselben Dialog öffnet.&lt;br /&gt;
&lt;br /&gt;
== Einen SSH-Schlüssel erzeugen ==&lt;br /&gt;
&lt;br /&gt;
=== Der Dialog (FileBrowserV2 / Settings-Seite) ===&lt;br /&gt;
&lt;br /&gt;
Der Dialog fragt alle Parameter in einem Formular ab:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Comment&amp;#039;&amp;#039;&amp;#039; — wird in den erzeugten Schlüssel eingebettet&lt;br /&gt;
  (Voreinstellung &amp;lt;code&amp;gt;stx@&amp;amp;lt;hostname&amp;amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Storage&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
** &amp;#039;&amp;#039;Save to disk file only&amp;#039;&amp;#039; — schreibt&lt;br /&gt;
   &amp;lt;code&amp;gt;~/.ssh/id_ed25519_stx&amp;lt;/code&amp;gt; (oder wohin man will) samt&lt;br /&gt;
   zugehöriger &amp;lt;code&amp;gt;.pub&amp;lt;/code&amp;gt;-Datei daneben.&lt;br /&gt;
** &amp;#039;&amp;#039;Save to disk AND load into ssh-agent&amp;#039;&amp;#039; — schreibt die Datei&lt;br /&gt;
   UND übergibt den Schlüssel dem laufenden ssh-agent.&lt;br /&gt;
** &amp;#039;&amp;#039;Load into ssh-agent only&amp;#039;&amp;#039; — der Schlüssel lebt nur im&lt;br /&gt;
   Speicher des Agents; nach Agent-Neustart ist er verloren.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Private key file&amp;#039;&amp;#039;&amp;#039; — vollständiger Pfad; ausgegraut im&lt;br /&gt;
  Agent-only-Modus.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Passphrase / Confirm&amp;#039;&amp;#039;&amp;#039; — leer lässt die On-Disk-Datei&lt;br /&gt;
  unverschlüsselt (Agent-only-Modus ignoriert die Passphrase, da&lt;br /&gt;
  das OpenSSH-Agent-Wire-Protokoll nur den entschlüsselten&lt;br /&gt;
  Schlüssel transportiert).&lt;br /&gt;
&lt;br /&gt;
Bei &amp;#039;&amp;#039;&amp;#039;Generate&amp;#039;&amp;#039;&amp;#039; wird die Public-Key-Zeile (dieselbe&lt;br /&gt;
&amp;lt;code&amp;gt;ssh-ed25519 AAAA... comment&amp;lt;/code&amp;gt;-Zeichenfolge, die&lt;br /&gt;
ssh-keygen ausgibt) in die System-Zwischenablage kopiert — zum&lt;br /&gt;
direkten Einfügen in die &amp;lt;code&amp;gt;~/.ssh/authorized_keys&amp;lt;/code&amp;gt; des&lt;br /&gt;
Zielhosts.&lt;br /&gt;
&lt;br /&gt;
=== Aus einem Workspace ===&lt;br /&gt;
&lt;br /&gt;
Für Headless-Deployments, Sandbox-Builds oder Skripte stellt&lt;br /&gt;
&amp;lt;code&amp;gt;SSH::Client&amp;lt;/code&amp;gt; einen reinen Smalltalk-Schlüsselgenerator&lt;br /&gt;
bereit, dessen Ausgabe bit-kompatibel zu&lt;br /&gt;
&amp;lt;code&amp;gt;ssh-keygen -t ed25519&amp;lt;/code&amp;gt; ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| seed comment priv |&lt;br /&gt;
seed    := SSH::Client generateEd25519Seed.&lt;br /&gt;
comment := &amp;#039;stx@&amp;#039;, OperatingSystem getHostName.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;/ Passphrase-verschlüsselt auf Platte speichern&amp;quot;&lt;br /&gt;
priv := (Filename homeDirectory / &amp;#039;.ssh&amp;#039; / &amp;#039;id_ed25519_stx&amp;#039;) pathName.&lt;br /&gt;
SSH::Client&lt;br /&gt;
    saveOpenSshEd25519Seed:seed&lt;br /&gt;
    toFile:priv&lt;br /&gt;
    comment:comment&lt;br /&gt;
    passphrase:&amp;#039;choose-something-long&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;/ UND in den laufenden Agent laden&amp;quot;&lt;br /&gt;
SSH::Client addEd25519SeedToAgent:seed comment:comment.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;/ Public-Key-Zeile zum Einfügen in authorized_keys ausgeben&amp;quot;&lt;br /&gt;
Transcript showCR:&lt;br /&gt;
    (SSH::Client authorizedKeysLineForEd25519Seed:seed comment:comment).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die so erzeugten Schlüssel sind mit den OpenSSH-Werkzeugen voll&lt;br /&gt;
interoperabel (&amp;lt;code&amp;gt;ssh-keygen -y -f ...&amp;lt;/code&amp;gt; rekonstruiert den&lt;br /&gt;
öffentlichen Schlüssel, &amp;lt;code&amp;gt;ssh-keygen -p -f ...&amp;lt;/code&amp;gt; ändert&lt;br /&gt;
die Passphrase usw.).&lt;br /&gt;
&lt;br /&gt;
=== Mit den Shell-Werkzeugen ===&lt;br /&gt;
&lt;br /&gt;
Der klassische Weg funktioniert weiterhin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t ed25519 -C &amp;quot;stx@your.host&amp;quot;&lt;br /&gt;
ssh-copy-id user@remotehost&lt;br /&gt;
ssh-add ~/.ssh/id_ed25519&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ssh-agent vorbereiten ==&lt;br /&gt;
&lt;br /&gt;
Der Weg über den Agent ist dem direkten Lesen von Schlüsseldateien&lt;br /&gt;
deutlich vorzuziehen: er hält verschlüsselte private Schlüssel&lt;br /&gt;
einmal pro Sitzung entsperrt und kann Identitäten verwalten&lt;br /&gt;
(hardware-tokengestützte Schlüssel, KeePassXC-Einträge), die ST/X&lt;br /&gt;
nie direkt sehen soll.&lt;br /&gt;
&lt;br /&gt;
ST/X erkennt den Agent-Pfad automatisch, sobald&lt;br /&gt;
&amp;lt;code&amp;gt;$SSH_AUTH_SOCK&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;&amp;#039;zum Zeitpunkt des Starts von stx&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
in der Prozessumgebung gesetzt ist.  Eine spätere Zuweisung aus&lt;br /&gt;
einem Workspace nützt nichts.&lt;br /&gt;
&lt;br /&gt;
=== Linux / macOS ===&lt;br /&gt;
&lt;br /&gt;
Die meisten Desktop-Distributionen starten einen Agent automatisch&lt;br /&gt;
beim Login (gnome-keyring unter GNOME, ssh-agent.service unter&lt;br /&gt;
systemd, KWallet unter KDE).  Prüfen im Terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo $SSH_AUTH_SOCK    # /run/user/1000/keyring/ssh oder ähnlich&lt;br /&gt;
ssh-add -l             # listet geladene Identitäten&lt;br /&gt;
ssh-add ~/.ssh/id_ed25519   # eigene laden, falls nicht da&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Läuft gar kein Agent, dieses Snippet in die Shell-rc-Datei&lt;br /&gt;
aufnehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# ~/.bashrc oder ~/.zshrc&lt;br /&gt;
if [ -z &amp;quot;$SSH_AUTH_SOCK&amp;quot; ]; then&lt;br /&gt;
    eval &amp;quot;$(ssh-agent -s)&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ST/X muss aus einer Shell gestartet werden, die diese rc bereits&lt;br /&gt;
gelesen hat — ein Desktop-Launcher aus dem Dateimanager erbt die&lt;br /&gt;
Variable nicht.  Empfehlung: ein kleines Wrapper-Skript unter&lt;br /&gt;
&amp;lt;code&amp;gt;~/.local/bin/&amp;lt;/code&amp;gt;, das die rc sourcet und dann stx&lt;br /&gt;
startet.&lt;br /&gt;
&lt;br /&gt;
Die Settings-Seite (&amp;#039;&amp;#039;&amp;#039;Extras → Settings → Plugins → Remote&lt;br /&gt;
Access — SSH Keys&amp;#039;&amp;#039;&amp;#039;) zeigt an, ob das laufende Image einen&lt;br /&gt;
Agent sieht.&lt;br /&gt;
&lt;br /&gt;
==== Permanente Einrichtung via systemd ====&lt;br /&gt;
&lt;br /&gt;
Für einen wirklich sitzungsübergreifenden Agent (überlebt Desktop-&lt;br /&gt;
Abmeldung, kommt beim nächsten Login wieder hoch) die bei den&lt;br /&gt;
meisten Distros mit dem Paket &amp;lt;code&amp;gt;openssh-clients&amp;lt;/code&amp;gt;&lt;br /&gt;
ausgelieferte Per-User-systemd-Unit aktivieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl --user enable --now ssh-agent.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend &amp;lt;code&amp;gt;SSH_AUTH_SOCK&amp;lt;/code&amp;gt; in der Shell-rc auf den&lt;br /&gt;
User-Service-Socket zeigen lassen (ersetzt das&lt;br /&gt;
&amp;lt;code&amp;gt;eval $(ssh-agent -s)&amp;lt;/code&amp;gt;-Snippet oben):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export SSH_AUTH_SOCK=&amp;quot;${XDG_RUNTIME_DIR}/ssh-agent.socket&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Schlüssel automatisch beim ersten Einsatz laden ====&lt;br /&gt;
&lt;br /&gt;
Um den manuellen &amp;lt;code&amp;gt;ssh-add&amp;lt;/code&amp;gt;-Schritt zu sparen, kann&lt;br /&gt;
OpenSSH Schlüssel beim ersten Bedarf selbst in den Agent laden.&lt;br /&gt;
In &amp;lt;code&amp;gt;~/.ssh/config&amp;lt;/code&amp;gt; eintragen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host *&lt;br /&gt;
    AddKeysToAgent yes&lt;br /&gt;
    IdentityFile ~/.ssh/id_ed25519&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die erste SSH-Verbindung fragt dann einmal nach der Passphrase und&lt;br /&gt;
übergibt den entsperrten Schlüssel an den Agent; weitere&lt;br /&gt;
Verbindungen nutzen die gespeicherte Identität ohne Prompt.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Windows 10+ bringt das native OpenSSH inklusive Agent-Dienst mit.&lt;br /&gt;
Einmalige Einrichtung:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Dienste&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;services.msc&amp;lt;/code&amp;gt;) als Administrator öffnen.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;OpenSSH Authentication Agent&amp;#039;&amp;#039;&amp;#039; suchen, Starttyp auf&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;Automatisch&amp;#039;&amp;#039;&amp;#039; setzen, &amp;#039;&amp;#039;&amp;#039;Starten&amp;#039;&amp;#039;&amp;#039; anklicken.&lt;br /&gt;
# In PowerShell: &amp;lt;code&amp;gt;ssh-add $HOME\.ssh\id_ed25519&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Prüfen: &amp;lt;code&amp;gt;ssh-add -l&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Der Windows-OpenSSH-Agent lauscht auf einer Named Pipe&lt;br /&gt;
(&amp;lt;code&amp;gt;\\.\pipe\openssh-ssh-agent&amp;lt;/code&amp;gt;), nicht auf einem&lt;br /&gt;
Unix-Socket.  ST/X unterstützt beide Transporte, jedoch setzt das&lt;br /&gt;
Windows-ssh-add &amp;lt;code&amp;gt;SSH_AUTH_SOCK&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;&amp;#039;nicht&amp;#039;&amp;#039;&amp;#039; selbst.&lt;br /&gt;
Daher einmalig systemweit setzen:&lt;br /&gt;
&lt;br /&gt;
# {{Key|Win}} drücken → &amp;quot;Umgebungsvariablen&amp;quot; → „Systemumgebungs-&lt;br /&gt;
  variablen bearbeiten&amp;quot;.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Umgebungsvariablen&amp;#039;&amp;#039;&amp;#039; → unter &amp;#039;&amp;#039;&amp;#039;Benutzervariablen&amp;#039;&amp;#039;&amp;#039;,&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;Neu&amp;#039;&amp;#039;&amp;#039; klicken.&lt;br /&gt;
# Name: &amp;lt;code&amp;gt;SSH_AUTH_SOCK&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wert: &amp;lt;code&amp;gt;\\.\pipe\openssh-ssh-agent&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ab- und wieder anmelden (oder stx neu starten), damit die neue&lt;br /&gt;
  Umgebung übernommen wird.&lt;br /&gt;
&lt;br /&gt;
==== PowerShell-Schnelleinrichtung ====&lt;br /&gt;
&lt;br /&gt;
Derselbe Aufbau aus einer &amp;#039;&amp;#039;&amp;#039;Administrator-PowerShell&amp;#039;&amp;#039;&amp;#039; heraus,&lt;br /&gt;
z.B. für Skripte oder unbeaufsichtigte Bereitstellung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Agent jetzt und bei jedem Neustart starten (permanent).&lt;br /&gt;
Set-Service -Name ssh-agent -StartupType Automatic&lt;br /&gt;
Start-Service ssh-agent&lt;br /&gt;
&lt;br /&gt;
# SSH_AUTH_SOCK dauerhaft für den Benutzer setzen (übersteht Reboots).&lt;br /&gt;
[Environment]::SetEnvironmentVariable(&lt;br /&gt;
    &amp;#039;SSH_AUTH_SOCK&amp;#039;,&lt;br /&gt;
    &amp;#039;\\.\pipe\openssh-ssh-agent&amp;#039;,&lt;br /&gt;
    &amp;#039;User&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# Schlüssel laden (fragt nach Passphrase, falls die Datei verschlüsselt ist).&lt;br /&gt;
ssh-add $HOME\.ssh\id_ed25519&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für einen einmaligen Agent-Start ohne dauerhafte Aktivierung&lt;br /&gt;
(z.B. Einzelsitzung) die &amp;lt;code&amp;gt;Set-Service&amp;lt;/code&amp;gt;-Zeile weglassen&lt;br /&gt;
und nur &amp;lt;code&amp;gt;Start-Service ssh-agent&amp;lt;/code&amp;gt; ausführen.  Die&lt;br /&gt;
env-var-Zeile lässt sich ebenfalls weglassen, wenn&lt;br /&gt;
&amp;lt;code&amp;gt;SSH_AUTH_SOCK&amp;lt;/code&amp;gt; nur in der aktuellen Shell gebraucht&lt;br /&gt;
wird — dann statt der &amp;lt;code&amp;gt;[Environment]&amp;lt;/code&amp;gt;-Variante&lt;br /&gt;
&amp;lt;code&amp;gt;$env:SSH_AUTH_SOCK = &amp;#039;...&amp;#039;&amp;lt;/code&amp;gt; verwenden.&lt;br /&gt;
&lt;br /&gt;
Auf stark abgespeckten Windows-Installationen ist der&lt;br /&gt;
ssh-agent-Dienst eventuell nicht vorhanden.  Einmalig nachrüsten&lt;br /&gt;
über &amp;#039;&amp;#039;&amp;#039;Einstellungen → Apps → Optionale Features → OpenSSH-&lt;br /&gt;
Client&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Alternative Agenten:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PuTTY pageant&amp;#039;&amp;#039;&amp;#039; — eigenes Protokoll; von ST/X&amp;#039;s&lt;br /&gt;
  &amp;lt;code&amp;gt;SSH::Agent&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;&amp;#039;nicht&amp;#039;&amp;#039;&amp;#039; unterstützt.  Schlüssel zu&lt;br /&gt;
  OpenSSH migrieren.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Git für Windows ssh-agent&amp;#039;&amp;#039;&amp;#039; — funktioniert;&lt;br /&gt;
  &amp;lt;code&amp;gt;SSH_AUTH_SOCK&amp;lt;/code&amp;gt; auf den dort veröffentlichten Socket&lt;br /&gt;
  zeigen lassen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;WSL 2&amp;#039;&amp;#039;&amp;#039; — ein ST/X innerhalb der WSL sieht den WSL-eigenen&lt;br /&gt;
  Agent normal; ein ST/X auf der Windows-Seite nicht.  Eine&lt;br /&gt;
  Brücke per &amp;lt;code&amp;gt;npiperelay&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;socat&amp;lt;/code&amp;gt; ist&lt;br /&gt;
  möglich.&lt;br /&gt;
&lt;br /&gt;
Prüfung über die Settings-Seite&lt;br /&gt;
(&amp;#039;&amp;#039;&amp;#039;Extras → Settings → Plugins → Remote Access — SSH Keys&amp;#039;&amp;#039;&amp;#039;) —&lt;br /&gt;
die Anzeige dort meldet, ob das laufende Image den Agent sieht.&lt;br /&gt;
&lt;br /&gt;
==== Schlüssel automatisch beim ersten Einsatz laden ====&lt;br /&gt;
&lt;br /&gt;
Windows-OpenSSH speichert agent-geladene Schlüssel &amp;#039;&amp;#039;&amp;#039;nicht&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
über Agent-Neustarts hinweg.  Um nicht nach jedem Reboot manuell&lt;br /&gt;
&amp;lt;code&amp;gt;ssh-add&amp;lt;/code&amp;gt; aufrufen zu müssen, dieselbe Lazy-Load-&lt;br /&gt;
Konfiguration in &amp;lt;code&amp;gt;%USERPROFILE%\.ssh\config&amp;lt;/code&amp;gt;&lt;br /&gt;
eintragen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host *&lt;br /&gt;
    AddKeysToAgent yes&lt;br /&gt;
    IdentityFile ~/.ssh/id_ed25519&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSSH lädt den Schlüssel dann beim ersten Einsatz in den Agent&lt;br /&gt;
(fragt einmal nach der Passphrase) und nutzt ihn für die übrige&lt;br /&gt;
Sitzung weiter.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Alle Stellschrauben sind klassenseitig auf&lt;br /&gt;
&amp;lt;code&amp;gt;SSH::SftpFilename&amp;lt;/code&amp;gt; erreichbar:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Accessor !! Voreinstellung !! Steuert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#idleEvictionSeconds:&amp;lt;/code&amp;gt; || 240 (4 Min) || Wie lange&lt;br /&gt;
eine gepoolte Verbindung im Leerlauf liegen darf, bevor sie beim&lt;br /&gt;
nächsten Zugriff proaktiv geschlossen und neu geöffnet wird.&lt;br /&gt;
Liegt knapp unter dem typischen&lt;br /&gt;
&amp;lt;code&amp;gt;ClientAliveInterval × ClientAliveCountMax&amp;lt;/code&amp;gt; des sshd,&lt;br /&gt;
damit wir uns recyceln, bevor der Server uns mit TCP-RESET&lt;br /&gt;
trennt.  &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; setzt auf Voreinstellung zurück.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#attrsCacheTtlSeconds:&amp;lt;/code&amp;gt; || 5 || Maximales Alter (s)&lt;br /&gt;
eines gecachten STAT, bevor &amp;lt;code&amp;gt;#ensureAttrs&amp;lt;/code&amp;gt; neu am&lt;br /&gt;
Server fragt.  Eltern-listDir stempelt ohnehin frische Attribute&lt;br /&gt;
auf alle Kinder, daher zahlt das Navigieren im offenen&lt;br /&gt;
Verzeichnis das TTL nicht.  &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; schaltet den Cache&lt;br /&gt;
ab.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#closeAllConnections&amp;lt;/code&amp;gt; || (Aktion) || Reißt jede&lt;br /&gt;
gepoolte Verbindung ab.  Nützlich nach einem bekannt schlechten&lt;br /&gt;
Netzereignis, vor einem bewussten Identitätswechsel oder zum&lt;br /&gt;
sauberen Image-Shutdown.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Diagnose ==&lt;br /&gt;
&lt;br /&gt;
=== SemaphoreMonitor ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SemaphoreMonitor&amp;lt;/code&amp;gt; über das Untermenü „Status&amp;quot; des&lt;br /&gt;
Launchers öffnen.  Der pro-Host-SFTP-Mutex erscheint als&lt;br /&gt;
&amp;lt;code&amp;gt;SFTP/&amp;amp;lt;user@host:port&amp;amp;gt;&amp;lt;/code&amp;gt;, der pool-weite Mutex als&lt;br /&gt;
&amp;lt;code&amp;gt;SFTP/pool&amp;lt;/code&amp;gt;.  Per Rechtsklick:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Copy Waiters Stack to Clipboard&amp;#039;&amp;#039;&amp;#039; — schreibt den Walkback&lt;br /&gt;
  des letzten Eigners samt aller Waiter als Text in die&lt;br /&gt;
  Zwischenablage.  Unverzichtbar, wenn ein Prozess in&lt;br /&gt;
  &amp;lt;code&amp;gt;readWait&amp;lt;/code&amp;gt; innerhalb von&lt;br /&gt;
  &amp;lt;code&amp;gt;withSftpClientDo:&amp;lt;/code&amp;gt; klemmt.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Copy List to Clipboard&amp;#039;&amp;#039;&amp;#039; — die ganze Tabelle, ideal für eine&lt;br /&gt;
  E-Mail-Diagnose.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Detect Deadlocks&amp;#039;&amp;#039;&amp;#039; — DFS über den Wait-for-Graph, meldet&lt;br /&gt;
  Zyklen.&lt;br /&gt;
&lt;br /&gt;
=== Logger ===&lt;br /&gt;
&lt;br /&gt;
Interessante Ereignisse werden über &amp;lt;code&amp;gt;Logger&amp;lt;/code&amp;gt; geloggt:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;warning:&amp;lt;/code&amp;gt; bei automatischem Reconnect nach toter&lt;br /&gt;
  Verbindung.&lt;br /&gt;
* &amp;lt;code&amp;gt;warning:&amp;lt;/code&amp;gt; bei Idle-Verdrängung eines Pool-Eintrags.&lt;br /&gt;
* &amp;lt;code&amp;gt;warning:&amp;lt;/code&amp;gt; wenn eine SSH-Schlüsseldatei nicht&lt;br /&gt;
  geparst werden konnte — die Datei wird übersprungen.&lt;br /&gt;
&lt;br /&gt;
== Einschränkungen ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Nur SFTP v3.&amp;#039;&amp;#039;&amp;#039;  Kein SETSTAT (kein entferntes&lt;br /&gt;
  chmod / chown / utime), kein SSH_FXP_READLINK exponiert&lt;br /&gt;
  (&amp;lt;code&amp;gt;#isSymbolicLink&amp;lt;/code&amp;gt; liefert immer &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;,&lt;br /&gt;
  &amp;lt;code&amp;gt;#linkInfo&amp;lt;/code&amp;gt; die normale stat-Info).  SFTPv5+-Features&lt;br /&gt;
  (atomares Überschreibungs-rename via&lt;br /&gt;
  &amp;lt;code&amp;gt;SSH_FXF_OVERWRITE&amp;lt;/code&amp;gt;) werden nicht unterstützt.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Serialisierung pro Host.&amp;#039;&amp;#039;&amp;#039;  Zwei gleichzeitige Operationen&lt;br /&gt;
  am selben Host stehen am Host-Mutex an.  Siehe [[#Ausblick]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;#renameTo:&amp;lt;/code&amp;gt; hat ein TOCTOU-Fenster.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  POSIX-typisches Überschreiben wird als Delete-dann-Rename&lt;br /&gt;
  emuliert; ein anderer Prozess kann sich dazwischenschieben.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;#isNonEmptyDirectory&amp;lt;/code&amp;gt; ist eine Heuristik.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Liefert immer &amp;lt;code&amp;gt;#isDirectory&amp;lt;/code&amp;gt; (die genaue Antwort&lt;br /&gt;
  würde drei Roundtrips pro Verzeichnis-Symbol kosten, was das&lt;br /&gt;
  ursprüngliche Baum-Ausklappen unerträglich gebremst hatte).&lt;br /&gt;
&lt;br /&gt;
== Implementierungsdetails ==&lt;br /&gt;
&lt;br /&gt;
Für Leser, die die Architektur verstehen wollen.  Fünf Klassen,&lt;br /&gt;
von oben nach unten:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Klasse !! Aufgabe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SSH::SftpFilename&amp;lt;/code&amp;gt; || Filename-Unterklasse, die&lt;br /&gt;
öffentliche API.  Bildet &amp;lt;code&amp;gt;sftp://...&amp;lt;/code&amp;gt;-URLs auf&lt;br /&gt;
entfernte Dateien ab und stellt &amp;lt;code&amp;gt;directoryContents&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;readingFileDo:&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;renameTo:&amp;lt;/code&amp;gt; usw. bereit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SSH::SftpClient&amp;lt;/code&amp;gt; || SFTP-v3-Protokoll&lt;br /&gt;
(Request/Response-Codec, listDir, stat, open, read, write, mkdir).&lt;br /&gt;
Wird von SftpFilename angesteuert.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SSH::Channel&amp;lt;/code&amp;gt; || SSH-Kanal-Multiplexer (CHANNEL_OPEN,&lt;br /&gt;
DATA, EOF, CLOSE, WINDOW_ADJUST).  Eine logische Sitzung pro&lt;br /&gt;
Channel-Instanz.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SSH::Client&amp;lt;/code&amp;gt; || High-Level-SSH-Client: öffnet den&lt;br /&gt;
Transport, führt KEX, Hostschlüssel-Prüfung und userauth durch und&lt;br /&gt;
verteilt anschließend Kanäle.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SSH::Transport&amp;lt;/code&amp;gt; || Drahtschicht.  Banner- und&lt;br /&gt;
KEXINIT-Austausch, ChaCha20-Poly1305-Paket-Framing, sendSeq /&lt;br /&gt;
recvSeq, Heartbeat, SSH_MSG_DISCONNECT.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Verbindungs-Pooling ===&lt;br /&gt;
&lt;br /&gt;
Alle &amp;lt;code&amp;gt;SftpFilename&amp;lt;/code&amp;gt;-Instanzen, die auf dasselbe Tripel&lt;br /&gt;
&amp;lt;code&amp;gt;user@host:port&amp;lt;/code&amp;gt; zeigen, teilen sich einen&lt;br /&gt;
&amp;lt;code&amp;gt;SSH::Client&amp;lt;/code&amp;gt; samt einem &amp;lt;code&amp;gt;SSH::SftpClient&amp;lt;/code&amp;gt;.&lt;br /&gt;
Der Pool ist klassenseitig und wird von einem einzigen&lt;br /&gt;
&amp;lt;code&amp;gt;ConnectionPoolMutex&amp;lt;/code&amp;gt; bewacht:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Lazy-Aufbau&amp;#039;&amp;#039;&amp;#039; — TCP + KEX + userauth + SFTP-INIT laufen&lt;br /&gt;
  erst beim ersten SFTP-Aufruf, nicht in &amp;lt;code&amp;gt;forUrl:&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Serialisierung pro Host&amp;#039;&amp;#039;&amp;#039; — SFTP-Anfragen an einen&lt;br /&gt;
  bestimmten Host werden durch einen &amp;lt;code&amp;gt;RecursionLock&amp;lt;/code&amp;gt;&lt;br /&gt;
  mit dem Namen &amp;lt;code&amp;gt;SFTP/&amp;amp;lt;user@host:port&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
  serialisiert (sichtbar im SemaphoreMonitor).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Idle-Verdrängung&amp;#039;&amp;#039;&amp;#039; — ein Pool-Eintrag, der länger als&lt;br /&gt;
  &amp;lt;code&amp;gt;idleEvictionSeconds&amp;lt;/code&amp;gt; ungenutzt liegt, wird beim&lt;br /&gt;
  nächsten Zugriff proaktiv geschlossen und neu geöffnet.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Automatischer Reconnect&amp;#039;&amp;#039;&amp;#039; — ein Fehler auf Transportebene&lt;br /&gt;
  (Broken Pipe, EOF, MNU auf nil-Socket) verdrängt den&lt;br /&gt;
  Pool-Eintrag, öffnet einen frischen Client und wiederholt die&lt;br /&gt;
  Anfrage &amp;#039;&amp;#039;&amp;#039;einmal&amp;#039;&amp;#039;&amp;#039;.  Anwendungsfehler aus&lt;br /&gt;
  SFTP-STATUS-Antworten werden sofort durchgereicht.&lt;br /&gt;
&lt;br /&gt;
== Ausblick ==&lt;br /&gt;
&lt;br /&gt;
Geplant, aber noch nicht umgesetzt:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Multi-Channel-Parallelität pro Host&amp;#039;&amp;#039;&amp;#039; — aktuell bedeutet&lt;br /&gt;
  eine TCP- plus eine SFTP-Verbindung pro Host, dass N&lt;br /&gt;
  gleichzeitige Anfragen serialisieren.  Pipelining über mehrere&lt;br /&gt;
  SshClients im Pool (bevorzugt) oder ein transport-seitiger&lt;br /&gt;
  Reader-Prozess, der eingehende Pakete in&lt;br /&gt;
  Pro-Kanal-Postfächer demultiplext, würde es dem Baum-Panel&lt;br /&gt;
  erlauben, weiter aufzulisten, während das Inhalts-Panel eine&lt;br /&gt;
  große Datei liest.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Genaues &amp;lt;code&amp;gt;#isNonEmptyDirectory&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; via OPEN_DIR&lt;br /&gt;
  + READ_DIR (nur erstes Batch) + CLOSE — drei Roundtrips pro&lt;br /&gt;
  Sondierung; lohnt erst, wenn der SftpClient Anfragen pipelinen&lt;br /&gt;
  kann.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SFTP-v5/v6-Aushandlung&amp;#039;&amp;#039;&amp;#039; für atomares Überschreibungs-&lt;br /&gt;
  rename, erweiterte Attribute und FTP-artige Kanonisierung.&lt;br /&gt;
&lt;br /&gt;
= Kommando-Shell =&lt;br /&gt;
&lt;br /&gt;
Lokale Kommando-Shell auf dieser expecco-Maschine.  Typische&lt;br /&gt;
Anwendungen: lokale Kommandozeile, lokales Hilfsprogramm,&lt;br /&gt;
Brücke zwischen entferntem Workflow und lokalem Tool.&lt;br /&gt;
&lt;br /&gt;
Das RemoteAccess-Plugin stellt bereit:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CmdShell - Open&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CmdShell - Close&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Keine Zugangsdaten, kein Netzwerk — läuft als der Benutzer des&lt;br /&gt;
expecco-Prozesses.  Ausgaben gehen in das expecco-Log.&lt;br /&gt;
&lt;br /&gt;
= Telnet =&lt;br /&gt;
&lt;br /&gt;
[[File:Warning.svg|24px|Warnung]] &amp;#039;&amp;#039;&amp;#039;Telnet ist ein veraltetes&lt;br /&gt;
Protokoll ohne Verschlüsselung.&amp;#039;&amp;#039;&amp;#039; Passwörter werden im Klartext&lt;br /&gt;
über die Leitung übertragen; jeder im Netzpfad kann sie lesen.&lt;br /&gt;
Telnet NUR einsetzen, wenn die Gegenstelle keine Alternative&lt;br /&gt;
bietet (typisch: alte Industriesteuerungen, Laborgeräte,&lt;br /&gt;
eingebettete Messgeräte ohne SSH-Stack).  Für alles andere&lt;br /&gt;
[[#SSH und SFTP]] verwenden.&lt;br /&gt;
&lt;br /&gt;
Das expecco-Plugin stellt bereit:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Telnet - Open Remote Connection With Login&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Telnet - Execute Remote Command&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Example - Remote Device Control via Telnet&amp;#039;&amp;#039;&amp;#039; (interne Demo)&lt;br /&gt;
&lt;br /&gt;
Das Telnet-Protokoll (RFC 854) ist ein bidirektionaler&lt;br /&gt;
8-Bit-Byte-Strom über TCP, mit In-Band-Steuersequenzen für&lt;br /&gt;
Terminal-Optionen.  Verbindungsaufbau zum Ziel-Host:Port; nach&lt;br /&gt;
optionalem In-Band-Login können beide Seiten Daten senden.&lt;br /&gt;
&lt;br /&gt;
= Siehe auch =&lt;br /&gt;
&lt;br /&gt;
* [[SSH Client|SSH::Client]] — die SSH-Schicht (exec, TTY,&lt;br /&gt;
  Agent-Weiterleitung, ProxyJump).&lt;br /&gt;
* [[FileBrowserV2]] — die Haupt-UI dieses Stacks.&lt;br /&gt;
* [[ClaudeCode plugin|Claude Code]] — nutzt denselben SSH-Stack&lt;br /&gt;
  als HTTPS-Transport.&lt;br /&gt;
* [[Wikipedia:Secure Shell|RFC 4251 (SSH-2 Architecture)]]&lt;br /&gt;
* [[Wikipedia:Telnet|RFC 854 (Telnet Protocol)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Netz]]&lt;br /&gt;
[[Category:SSH]]&lt;/div&gt;</summary>
		<author><name>Sv</name></author>
	</entry>
</feed>