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 ssh
autorisations permettant <user B>
à host B>
de ssh
dans host A
et d' exécuter une commande.
Bien sûr , B
d' A
accès peut déjà être fermée par une ssh
clé, 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 B
s'exécuter A
, par exemple, rm -rf /
ne peuvent pas être appelées. (Ceci est particulièrement important lorsque la ssh
clé n'a pas de mot de passe.)
Heureusement, ssh
a 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 ssh
session host-B
est 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 B
est 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-A
le répertoire ssh il y a un fichier
/home/user-A/.ssh/authorized_keys
qui reconnaît la clé id-clip
et permet la ssh
connexion.
Habituellement, le contenu de chaque ligne authorized_keys
est 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-clip
est utilisée pour lancer une ssh
connexion à host-A
- quelle que soit la commande écrite sur la ssh
ligne de commande .
La commande indique un fichier de script allowed-commands.sh
et 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 ssh
sur la machine B
était
... | ssh <user-A>@<host A> to_clipboard
La chaîne to-clipboard
est transmise allowed-commands.sh
par la variable d'environnement SSH_ORIGINAL_COMMAND
. Ajout, nous avons passé le nom de la clé,, à id-clip
partir de la ligne dans authorized_keys
laquelle 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-send
fonctionne sur Ubuntu 18.04, peut-être pas sur d'autres).
Dans la ligne
cat | xsel --display :0 -i -b
le paramètre --display :0
est 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 :0
fonctionne 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_config
sur l'hôte A
qui 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 sshd
serveur 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-clipboard
peuvent être construites en parallèle dans le même cadre.
:'<,'>w !ssh desktop pbcopy