Essa resposta se desenvolve tanto na resposta escolhida , adicionando mais segurança.
Essa resposta discutiu a forma geral
<command that makes output> | \
ssh <user A>@<host A> <command that maps stdin to clipboard>
Onde a segurança pode faltar está nas sshpermissões permitindo <user B>sobre host B>a sshem host Ae executar qualquer comando.
É claro Bque o Aacesso já pode ser bloqueado por uma sshchave e pode até ter uma senha. Mas outra camada de segurança pode restringir o escopo de comandos permitidos que Bpodem ser executados A, por exemplo, para que rm -rf /não possam ser chamados. (Isso é especialmente importante quando a sshchave não possui uma senha.)
Felizmente, sshpossui um recurso interno chamado restrição de comando ou comando forçado . Veja ssh.com , ou esta questão serverfault.com .
A solução abaixo mostra a solução geral do formulário junto com a ssh restrição de comando imposta.
Exemplo de solução com restrição de comando adicionada
Esta solução aprimorada de segurança segue a forma geral - a chamada da sshsessão host-Bé simplesmente:
cat <file> | ssh <user-A>@<host A> to_clipboard
O restante mostra a configuração para que isso funcione.
Configuração da restrição de comando ssh
Suponha que a conta do usuário Bseja user-B, e B tenha uma chave ssh id-clip, criada da maneira usual ( ssh-keygen).
Então no user-Adiretório ssh existe um arquivo
/home/user-A/.ssh/authorized_keys
que reconhece a chave id-clipe permite a sshconexão.
Normalmente, o conteúdo de cada linha authorized_keysé exatamente a chave pública que está sendo autorizada, por exemplo, o conteúdo de id-clip.pub.
No entanto, para impor restrições de comando, o conteúdo da chave pública é anexado (na mesma linha) pelo comando a ser executado.
No nosso 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>
O comando designado "/home/user-A/.ssh/allowed-commands.sh id-clip", e somente esse comando designado, é executado sempre que a chave id-clipé usada para iniciar uma sshconexão host-A- independentemente do comando que está escrito na sshlinha de comando .
O comando indica um arquivo de script allowed-commands.she o conteúdo desse arquivo de 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
A chamada original para ssha máquina Bfoi
... | ssh <user-A>@<host A> to_clipboard
A sequência to-clipboardé passada allowed-commands.shpela variável de ambiente SSH_ORIGINAL_COMMAND. Além disso, passamos o nome da chave id-clip, da linha na authorized_keysqual é acessada apenas por id-clip.
A linha
notify-send "ssh to-clipboard, from ${Id}"
é apenas uma caixa de mensagens pop-up para informar que a área de transferência está sendo gravada - provavelmente também é um bom recurso de segurança. ( notify-sendfunciona no Ubuntu 18.04, talvez não outros).
Na linha
cat | xsel --display :0 -i -b
o parâmetro --display :0é necessário porque o processo não possui sua própria exibição X com uma área de transferência; portanto, ele deve ser especificado explicitamente. Esse valor :0funciona no Ubuntu 18.04 com o servidor de janelas Wayland. Em outras configurações, pode não funcionar. Para um servidor X padrão, esta resposta pode ajudar.
host-A /etc/ssh/sshd_config parâmetros
Finalmente, alguns parâmetros no /etc/ssh/sshd_confighost Aque devem ser configurados para garantir a permissão para conexão e permissão para usar ssh-key apenas sem senha:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A
Para fazer o sshdservidor reler a configuração
sudo systemctl restart sshd.service
ou
sudo service sshd.service restart
conclusão
É um esforço para configurá-lo, mas outras funções além disso to-clipboardpodem ser construídas em paralelo na mesma estrutura.
:'<,'>w !ssh desktop pbcopy