Cette réponse se développe à la fois sur la réponse choisie en ajoutant plus de sécurité.
Cette réponse a discuté de la forme générale
<command that makes output> | \
ssh <user A>@<host A> <command that maps stdin to clipboard>
Lorsque la sécurité est peut manquer dans les sshautorisations permettant <user B>à host B>de sshdans host Aet d' exécuter une commande.
Bien sûr , Bd' Aaccès peut déjà être fermée par une sshclé, et il peut même avoir un mot de passe. Mais une autre couche de sécurité peut restreindre la portée des commandes autorisées sur lesquelles Bs'exécuter A, par exemple, rm -rf /ne peuvent pas être appelées. (Ceci est particulièrement important lorsque la sshclé n'a pas de mot de passe.)
Heureusement, ssha une fonctionnalité intégrée appelée restriction de commande ou commande forcée . Voir ssh.com ou cette question serverfault.com .
La solution ci-dessous montre la solution de formulaire générale avec la ssh restriction de commande appliquée.
Exemple de solution avec restriction de commande ajoutée
Cette solution de sécurité renforcée suit la forme générale - l'appel à partir de la sshsession host-Best simplement:
cat <file> | ssh <user-A>@<host A> to_clipboard
Le reste de ceci montre la configuration pour que cela fonctionne.
Configuration de la restriction de commande ssh
Supposons que le compte utilisateur sur Best user-B, et que B ait une clé ssh id-clip, qui a été créée de la manière habituelle ( ssh-keygen).
Ensuite, dans user-Ale répertoire ssh il y a un fichier
/home/user-A/.ssh/authorized_keys
qui reconnaît la clé id-clipet permet la sshconnexion.
Habituellement, le contenu de chaque ligne authorized_keysest exactement la clé publique autorisée, par exemple le contenu de id-clip.pub.
Cependant, pour appliquer la restriction de commande, le contenu de la clé publique est ajouté (sur la même ligne) par la commande à exécuter.
Dans notre cas:
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>
La commande désignée "/home/user-A/.ssh/allowed-commands.sh id-clip", et seulement cette commande désignée, est exécutée chaque fois que la clé id-clipest utilisée pour lancer une sshconnexion à host-A- quelle que soit la commande écrite sur la sshligne de commande .
La commande indique un fichier de script allowed-commands.shet le contenu de ce fichier de script est
#/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
L'appel initial sshsur la machine Bétait
... | ssh <user-A>@<host A> to_clipboard
La chaîne to-clipboardest transmise allowed-commands.shpar la variable d'environnement SSH_ORIGINAL_COMMAND. Ajout, nous avons passé le nom de la clé,, à id-clippartir de la ligne dans authorized_keyslaquelle on accède uniquement par id-clip.
La ligne
notify-send "ssh to-clipboard, from ${Id}"
est juste une boîte de message contextuelle pour vous informer que le presse-papiers est en cours d'écriture - c'est probablement aussi une bonne fonctionnalité de sécurité. ( notify-sendfonctionne sur Ubuntu 18.04, peut-être pas sur d'autres).
Dans la ligne
cat | xsel --display :0 -i -b
le paramètre --display :0est nécessaire car le processus n'a pas son propre affichage X avec un presse-papiers, il doit donc être spécifié explicitement. Cette valeur :0fonctionne sur Ubuntu 18.04 avec le serveur de fenêtres Wayland. Sur d'autres configurations, cela peut ne pas fonctionner. Pour un serveur X standard, cette réponse peut aider.
host-A /etc/ssh/sshd_config paramètres
Enfin, quelques paramètres dans /etc/ssh/sshd_configsur l'hôte Aqui devraient être définis pour garantir l'autorisation de se connecter et l'autorisation d'utiliser ssh-key uniquement sans mot de passe:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A
Pour que le sshdserveur relise la configuration
sudo systemctl restart sshd.service
ou
sudo service sshd.service restart
conclusion
C'est un peu d'effort pour le configurer, mais d'autres fonctions to-clipboardpeuvent être construites en parallèle dans le même cadre.
:'<,'>w !ssh desktop pbcopy