Diese Antwort entwickelt sich sowohl nach der gewählten Antwort, indem mehr Sicherheit hinzugefügt wird.
Diese Antwort erörterte die allgemeine Form
<command that makes output> | \
ssh <user A>@<host A> <command that maps stdin to clipboard>
Wo Sicherheit fehlt werden kann , ist in den sshBerechtigungen ermöglichen <user B>auf host B>bis sshzu host Aund führen jeden Befehl.
Natürlich kann Bder AZugriff bereits über einen sshSchlüssel erfolgen, und es kann sogar ein Passwort vorhanden sein. Eine andere Sicherheitsebene kann jedoch den Umfang der zulässigen Befehle einschränken, die ausgeführt werden Bkönnen A, z. B. so, dass rm -rf /sie nicht aufgerufen werden können. (Dies ist besonders wichtig, wenn der sshSchlüssel kein Passwort hat.)
Glücklicherweise verfügt es sshüber eine integrierte Funktion, die als Befehlsbeschränkung oder erzwungener Befehl bezeichnet wird . Siehe ssh.com oder diese serverfault.com-Frage .
Die folgende Lösung zeigt die allgemeine Formularlösung zusammen mit der ssh Befehlsbeschränkung erzwungenen .
Beispiellösung mit Befehlsbeschränkung hinzugefügter
Diese sicherheitsverbesserte Lösung folgt der allgemeinen Form - der Aufruf ab der sshSitzung host-Blautet einfach:
cat <file> | ssh <user-A>@<host A> to_clipboard
Der Rest zeigt das Setup, damit das funktioniert.
Einrichtung der ssh-Befehlsbeschränkung
Angenommen, das Benutzerkonto Bist user-Baktiviert und B verfügt über einen SSH-Schlüssel id-clip, der auf die übliche Weise erstellt wurde ( ssh-keygen).
Dann gibt es im user-ASSH-Verzeichnis eine Datei
/home/user-A/.ssh/authorized_keys
das erkennt den Schlüssel id-clipund ermöglicht die sshVerbindung.
Normalerweise ist der Inhalt jeder Zeile authorized_keysgenau der öffentliche Schlüssel, der autorisiert wird, z. B. der Inhalt von id-clip.pub.
Um jedoch die Befehlsbeschränkung zu erzwingen, wird dem auszuführenden Befehl der Inhalt des öffentlichen Schlüssels (in derselben Zeile) vorangestellt.
In unserem Fall:
command="/home/user-A/.ssh/allowed-commands.sh id-clip",no-agent-forwarding,no-port-forwarding,no-user-rc,no-x11-forwarding,no-pty <content of file id-clip.pub>
Der angegebene Befehl "/home/user-A/.ssh/allowed-commands.sh id-clip"und nur dieser festgelegte Befehl wird immer dann ausgeführt, wenn mit dem Schlüssel id-clipeine sshVerbindung hergestellt wird host-A- unabhängig davon, welcher Befehl in der sshBefehlszeile geschrieben ist .
Der Befehl gibt eine Skriptdatei allowed-commands.shund den Inhalt dieser Skriptdatei an
#/bin/bash
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.
Id=${1}
case "$SSH_ORIGINAL_COMMAND" in
"to-clipboard")
notify-send "ssh to-clipboard, from ${Id}"
cat | xsel --display :0 -i -b
;;
*)
echo "Access denied"
exit 1
;;
esac
Der ursprüngliche Anruf sshan der Maschine Bwar
... | ssh <user-A>@<host A> to_clipboard
Die Zeichenfolge to-clipboardwird allowed-commands.shvon der Umgebungsvariablen übergeben SSH_ORIGINAL_COMMAND. Außerdem haben wir den Namen des Schlüssels id-clipaus der Zeile übergeben, in authorized_keysder nur von zugegriffen wirdid-clip .
Die Linie
notify-send "ssh to-clipboard, from ${Id}"
ist nur eine Popup-Meldungsbox, die Sie darüber informiert, dass die Zwischenablage geschrieben wird - das ist wahrscheinlich auch eine gute Sicherheitsfunktion. ( notify-sendfunktioniert unter Ubuntu 18.04, vielleicht nicht unter anderen).
In der Schlange
cat | xsel --display :0 -i -b
Der Parameter --display :0ist erforderlich, da der Prozess keine eigene X-Anzeige mit einer Zwischenablage hat und daher explizit angegeben werden muss. Dieser Wert :0funktioniert unter Ubuntu 18.04 mit Wayland Windows Server. Bei anderen Setups funktioniert es möglicherweise nicht. Bei einem Standard-X-Server kann diese Antwort hilfreich sein.
host-A /etc/ssh/sshd_config Parameter
Zum Schluss noch ein paar Parameter /etc/ssh/sshd_configauf dem Host A, die festgelegt werden sollten, um die Berechtigung zum sshHerstellen einer Verbindung und die Berechtigung zum Verwenden von -key nur ohne Kennwort sicherzustellen:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A
Damit der sshdServer die Konfiguration erneut liest
sudo systemctl restart sshd.service
oder
sudo service sshd.service restart
Fazit
Es ist ein gewisser Aufwand, es einzurichten, aber andere Funktionen to-clipboardkönnen parallel zum selben Framework erstellt werden.
:'<,'>w !ssh desktop pbcopy