Questa risposta si sviluppa sia sulla risposta scelta aggiungendo più sicurezza.
Tale risposta ha discusso la forma generale
<command that makes output> | \
ssh <user A>@<host A> <command that maps stdin to clipboard>
Dove la sicurezza può mancare è nei ssh
permessi permettendo <user B>
su host B>
a ssh
in host A
ed eseguire qualsiasi comando.
Certo B
cheA
accesso può già essere recintato da una ssh
chiave e potrebbe anche avere una password. Ma un altro livello di sicurezza può limitare l'ambito dei comandi consentiti che B
possono essere eseguiti A
, ad esempio in modo che rm -rf /
non possano essere chiamati. (Questo è particolarmente importante quando la ssh
chiave non ha una password.)
Fortunatamente, ssh
ha una funzione integrata chiamata restrizione di comando o comando forzato . Vedi ssh.com o questa domanda serverfault.com .
La soluzione seguente mostra la soluzione di modulo generale insieme alla ssh
restrizione di comando applicata.
Esempio Soluzione con restrizione di comando aggiunta
Questa soluzione di sicurezza avanzata segue il modulo generale: la chiamata dal ssh
sessione in poi host-B
è semplicemente:
cat <file> | ssh <user-A>@<host A> to_clipboard
Il resto di questo mostra la configurazione per farlo funzionare.
Installazione di restrizione del comando ssh
Supponiamo che l'account utente su B
ISuser-B
, e B è una chiave SSH id-clip
, che è stato creato nel modo consueto ( ssh-keygen
).
Quindi dentro user-A
directory ssh c'è un file
/home/user-A/.ssh/authorized_keys
che riconosce la chiave id-clip
e consente la ssh
connessione.
Di solito il contenuto di ogni riga authorized_keys
è esattamente la chiave pubblica autorizzata, ad esempio il contenuto di id-clip.pub
.
Tuttavia, per imporre la restrizione del comando che il contenuto della chiave pubblica è anteposto (sulla stessa riga) dal comando da eseguire.
Nel nostro caso:
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>
Il comando designato "/home/user-A/.ssh/allowed-commands.sh id-clip"
, e solo quel comando designato, viene eseguito ogni volta che id-clip
viene usata la chiave per iniziare una ssh
connessione host-A
- indipendentemente da quale comando sia scrittossh
riga di comando .
Il comando indica un file di script allowed-commands.sh
e il contenuto di tale file di script è
#/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
La chiamata originale alla ssh
macchinaB
era
... | ssh <user-A>@<host A> to_clipboard
La stringa to-clipboard
viene passata allowed-commands.sh
dalla variabile d'ambiente SSH_ORIGINAL_COMMAND
. Inoltre, abbiamo passato il nome della chiave,id-clip
, dalla riga in authorized_keys
cui si accede solo daid-clip
.
La linea
notify-send "ssh to-clipboard, from ${Id}"
è solo una finestra di messaggio popup per informarti che gli appunti vengono scritti: probabilmente è anche una buona funzionalità di sicurezza. (notify-send
funziona su Ubuntu 18.04, forse non altri).
In linea
cat | xsel --display :0 -i -b
il parametro --display :0
è necessario perché il processo non ha il proprio display X con gli Appunti, quindi deve essere specificato esplicitamente. Questo valore :0
funziona su Ubuntu 18.04 con il server Windows Wayland. In altre configurazioni potrebbe non funzionare. Per un server X standard questa risposta potrebbe essere d'aiuto.
host-A
/etc/ssh/sshd_config
parametri
Infine, alcuni parametri /etc/ssh/sshd_config
sull'host A
che dovrebbero essere impostati per garantire l'autorizzazione alla connessione e l'autorizzazione per usare ssh
-key solo senza password:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A
Per rendere il sshd
server rileggere la configurazione
sudo systemctl restart sshd.service
o
sudo service sshd.service restart
conclusione
È uno sforzo per configurarlo, ma altre funzioni oltre a quelle to-clipboard
possono essere costruite in parallelo nello stesso framework.
:'<,'>w !ssh desktop pbcopy