Pergunta do Borderline ServerFault, mas estou programando alguns scripts de shell, então estou tentando aqui primeiro :)
A maioria dos * nixes possui um comando que permite direcionar / redirecionar a saída para a área de transferência / área de transferência local e recuperar a partir da mesma. No OS X, esses comandos são
pbcopy, pbpaste
Existe alguma maneira de replicar essa funcionalidade enquanto o SSHed está em outro servidor? Isso é,
- Estou usando o computador A.
- Abro uma janela do terminal
- Eu SSH para Computador B
- Eu executo um comando no Computador B
- A saída do Computador B é redirecionada ou copiada automaticamente para a área de transferência do Computador A.
E sim, eu sei que eu poderia (estremecer) usar o mouse para selecionar o texto do comando, mas me acostumei tanto ao fluxo de trabalho que envia a saída diretamente para a área de transferência que quero o mesmo para minhas sessões remotas.
O código é útil, mas abordagens gerais também são apreciadas.
:'<,'>w !ssh desktop pbcopy
-e none
bandeira ssh descrita aqui: unix.stackexchange.com/questions/210615/...Minha maneira favorita é
ssh [remote-machine] "cat log.txt" | xclip -selection c
. Isso é mais útil quando você não deseja (ou não pode) ssh de remoto para local.Edit: em Cygwin
ssh [remote-machine] "cat log.txt" > /dev/clipboard
.Edit: Um comentário útil de nbren12:
fonte
ssh [remote-machine] "cat log.txt" | pbcopy
cat
para fazer isso funcionar no cygwin Windows 8:ssh [remote-machine] "cat log.txt" | cat > /dev/clipboard
(é claro, meu comando remoto não eracat
; era algo mais dentro de uma máquina virtual vagante, então eu realmente corrivagrant ssh -c "command" | cat > /dev/clipboard
)RemoteForward 127.0.0.1:2222 127.0.0.1:22
à entrada de servidores no seu local.ssh/config
e executarssh -p 2222 127.0.0.1
na máquina remota, que redirecionará a conexão para a máquina local.Encontrei uma ótima solução que não requer uma conexão ssh reversa!
Você pode usar o xclip no host remoto, juntamente com o encaminhamento ssh X11 e o XQuartz no sistema OSX.
Para configurar isso:
,
)ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"
fonte
ssh remote-host "echo 'hello from remote-host' | pbcopy
? Esta seria uma excelente resposta se ele iria trabalhar algo como isto:ssh -X remote-host
em seguida, no host remoto:echo 'hello from remote-host' | xclip -selection clipboard
-X
X11 Forwarding over SSH, os programas X11 poderão atualizar sua área de transferência através das configurações do XQuartz acima. O comando único é demonstrar que o envio de algoecho
para a área de transferência do host remotoxclip
funciona e deve ser sincronizado com o host do cliente SSH local. Observe como @ gdw2 diz: "O texto| xclip
está entre aspas duplas". Como tal, ele será executado como um comando no servidor remoto para enviar algo para a área de transferência.Porta de túnel reverso no servidor ssh
Todas as soluções existentes precisam:
xclip
no servidor funciona muito bem) ouAqui está outra maneira de fazer isso, embora seja necessário modificar a forma como você ssh no seu computador.
Eu comecei a usar isso e não é nem de longe tão intimidador quanto parece, então tente.
Cliente (inicialização da sessão ssh)
(dica: torne isso uma combinação de teclas para que você não precise digitá-lo)
Cliente (outra guia)
Nota: se você não tiver
pbcopy
, bastatee
enviá-lo para um arquivo.Servidor (dentro da sessão SSH)
Outras notas
Na verdade, mesmo se você estiver no meio de uma sessão ssh, há uma maneira de iniciar um túnel, mas eu não quero assustar as pessoas do que realmente não é tão ruim quanto parece. Mas adicionarei os detalhes mais tarde, se houver algum interesse
fonte
cat some_useful_content.txt | nc localhost 2000
comando parece travar quando faço isso. Eu preciso manualmente CTR-c para pará-lo, e é só então que o conteúdo fica ao meu clipe cliente / papelãonc -l -p
funciona para mim, mas simplesmentenc -l
não. E também tenho o problema do @AlanStorm.-c
. Eu uso o GNU netcat instalado pelo brew.Existem várias ferramentas para acessar as seleções do X11, incluindo xclip e XSel . Observe que o X11 tradicionalmente possui várias seleções e a maioria dos programas tem algum entendimento da área de transferência e da seleção primária (que não são iguais). O Emacs também pode trabalhar com a seleção secundária, mas isso é raro, e ninguém realmente sabe o que fazer com os buffers de corte ...
Em resumo, você deve tentar
xclip -i
/xclip -o
ouxclip -i -sel clip
/xclip -o -sel clip
ouxsel -i
/xsel -o
ouxsel -i -b
/xsel -o -b
, dependendo do que deseja.fonte
ssh -C -X user@remote-host
. Se a execução do xclip no lado remoto não estiver funcionando, verifique seX11Forwarding yes
está configurada no/etc/ssh/sshd_config
arquivo remoto . Verifique também sexauth
está instalado no lado remoto. Para uma máquina sem cabeça, você pode instalarxauth
exvfb
.xvfb
menção. Eu estava executando um servidor sem cabeça, portanto o X11 não deve estar sendo executado!Esta é a minha solução baseada no túnel reverso SSH, netcat e xclip.
Primeiro, crie um script (por exemplo, clipboard-daemon.sh) em sua estação de trabalho:
e inicie-o em segundo plano.
Ele iniciará a saída da tubulação nc para o processo xclip e respawning após receber parte dos dados
Em seguida, inicie a conexão ssh com o host remoto:
Enquanto estiver conectado na caixa remota, tente o seguinte:
tente colar na sua estação de trabalho
É claro que você pode escrever um script de wrapper que inicie primeiro o clipboard-daemon.sh e depois a sessão ssh. É assim que funciona para mim. Aproveitar.
fonte
Não é uma linha, mas não requer ssh extra .
netcat
se necessáriocat ~/some_file.txt | nc termbin.com 9999
. Isso copiará a saída para otermbin
site e imprimirá o URL na sua saída.Obviamente, não o use para conteúdo sensível.
fonte
Essa resposta se desenvolve tanto na resposta escolhida , adicionando mais segurança.
Essa resposta discutiu a forma geral
Onde a segurança pode faltar está nas
ssh
permissões permitindo<user B>
sobrehost B>
assh
emhost A
e executar qualquer comando.É claro
B
que oA
acesso já pode ser bloqueado por umassh
chave e pode até ter uma senha. Mas outra camada de segurança pode restringir o escopo de comandos permitidos queB
podem ser executadosA
, por exemplo, para querm -rf /
não possam ser chamados. (Isso é especialmente importante quando assh
chave não possui uma senha.)Felizmente,
ssh
possui 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
ssh
sessãohost-B
é simplesmente: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
B
sejauser-B
, e B tenha uma chave sshid-clip
, criada da maneira usual (ssh-keygen
).Então no
user-A
diretório ssh existe um arquivoque reconhece a chave
id-clip
e permite assh
conexão.Normalmente, o conteúdo de cada linha
authorized_keys
é exatamente a chave pública que está sendo autorizada, por exemplo, o conteúdo deid-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:
O comando designado
"/home/user-A/.ssh/allowed-commands.sh id-clip"
, e somente esse comando designado, é executado sempre que a chaveid-clip
é usada para iniciar umassh
conexãohost-A
- independentemente do comando que está escrito nassh
linha de comando .O comando indica um arquivo de script
allowed-commands.sh
e o conteúdo desse arquivo de script éA chamada original para
ssh
a máquinaB
foiA sequência
to-clipboard
é passadaallowed-commands.sh
pela variável de ambienteSSH_ORIGINAL_COMMAND
. Além disso, passamos o nome da chaveid-clip
, da linha naauthorized_keys
qual é acessada apenas porid-clip
.A linha
é 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-send
funciona no Ubuntu 18.04, talvez não outros).Na linha
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:0
funciona 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âmetrosFinalmente, alguns parâmetros no
/etc/ssh/sshd_config
hostA
que devem ser configurados para garantir a permissão para conexão e permissão para usarssh
-key apenas sem senha:Para fazer o
sshd
servidor reler a configuraçãoou
conclusão
É um esforço para configurá-lo, mas outras funções além disso
to-clipboard
podem ser construídas em paralelo na mesma estrutura.fonte
A solução @rhileighalmgren é boa, mas o pbcopy copia irritantemente o último caractere "\ n", eu uso "head" para remover o último caractere para evitar isso:
Minha solução completa está aqui: http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/
fonte
A solução mais simples de todas, se você estiver no OS X usando o Terminal e estiver navegando em um servidor remoto e desejar obter os resultados de um arquivo de texto, log ou csv, simplesmente:
1)
Cmd-K
para limpar a saída do terminal2)
cat <filename>
para exibir o conteúdo do arquivo3)
Cmd-S
para salvar a saída do terminalVocê removerá manualmente a primeira e a última linha do arquivo, mas esse método é um pouco mais simples do que depender de outros pacotes a serem instalados, "túneis reversos" e tentar ter um IP estático etc.
fonte
scp
!