Executando 'scp' cliente - servidor resulta no comando scp não encontrado (no servidor), por quê?

1

Nós construímos intencionalmente o OpenSSH usando este switch: --with-default-path blank. Estamos tentando implantar o OpenSSH para que o servidor não inclua o scp binário.

Agora, quando tentamos fazer um scp de uma máquina local (cliente) para uma máquina remota (servidor), recebemos esta mensagem:

scp command not found

O servidor parece esperar que os binários scp estejam presentes nos dois lados (cliente e servidor). Então, por que precisamos do binário scp no final remoto? Não é suficiente apenas tê-lo na máquina local (cliente)? Alguém pode esclarecer?

OBSERVAÇÃO: Se scp não estiver presente no servidor remoto onde queremos copiar algum arquivo, ele exibe um erro como este no servidor remoto:

scp command not found

    
por slm 06.07.2018 / 15:04

3 respostas

3

Acho que você respondeu sua própria pergunta: você precisa de scp em ambos os lados.

A instância local de scp chama remotamente scp com o sinalizador -t não documentado para manipular o protocolo de transferência de arquivos.

Se você realmente não tiver scp , mas tiver um servidor ssh , poderá usar sftp para transferir os arquivos, pois em muitos casos o componente do servidor SFTP é incorporado o servidor ssh .

    
por 06.07.2018 / 15:10
2

TLDR

O protocolo SSH está facilitando vários "serviços" sobrepostos dos quais a cópia de arquivos é um deles. A maneira como o protocolo SSH faz isso é lançar scp -t como um processo filho em um servidor, quando um cliente se conecta a ele usando a ferramenta de linha de comando scp .

Cada servidor em que o SSH está instalado requer um conjunto completo de ferramentas CLI para fornecer todos os "serviços" que fazem parte do SSH ( ssh , scp , sftp ). A localização no disco só é exigida pelo daemon do servidor de gerenciamento sshd . Isso significa que eles podem estar em qualquer local, os clientes não estão cientes nem precisam estar, eles estão se comunicando apenas com sshd via porta TCP (normalmente 22) como cliente / servidor.

Antecedentes

Aplicativos como scp e rsync e ssh em si são aplicativos cliente / servidor. Isso significa que eles exigem um aplicativo cliente scp e um aplicativo de servidor. Nesse caso, scp é ambos.

Veja um exemplo

$ scp /Users/user1/thumbnails-digikam.db pi-hole:/tmp/.
thumbnails-digikam.db                                                                                                                                   0%    0     0.0KB/s   --:-- ETA^Z
[1]+  Stopped                 scp /Users/sammingolelli/thumbnails-digikam.db pi-hole:/tmp/.

Eu iniciei um scp do meu laptop para o meu servidor Raspberry Pi (pi-hole) e, em seguida, pausei-o no meio do fluxo via Ctrl + Z .

Se eu, então, ssh para o servidor Raspberry Pi e faço um ps :

$ ps -eaf | grep [s]cp
pi        9688  6147  0 11:11 ?        00:00:00 scp -t /tmp/.

Podemos ver que o servidor de aplicativos scp está em execução e gravar nosso arquivo no diretório /tmp . Podemos ver o arquivo neste estado pausado sendo escrito também:

Rasberry Pi (servidor)
$ ls -l /tmp/thumbnails-digikam.db
-rw-r--r-- 1 pi pi 2260992 Jul  6 11:12 /tmp/thumbnails-digikam.db
laptop (cliente)
$ ls -l ~/thumbnails-digikam.db
-rw-r--r--  1 user1  staff  38551552 Jun  4 00:47 /Users/user1/thumbnails-digikam.db

Se deixarmos que o scp continue pausando-o no laptop (cliente):

$ fg
scp /Users/user1/thumbnails-digikam.db pi-hole:/tmp/.
thumbnails-digikam.db
$

Ele terminará e, se olharmos novamente no Raspberry Pi (servidor), você verá que o aplicativo scp não está mais em execução:

$ ps -eaf|grep [s]cp
$

O OpenSSH é um pouco único, pois inicia aplicativos de servidor (daemons) sob demanda apenas pela duração de uma operação específica e, depois que a transferência é concluída, ela é finalizada.

O daemon original que está facilitando isso é o daemon ssh :

$ ps auxf | less
...
root      6132  0.0  0.6  11524  5812 ?        Ss   02:53   0:00  \_ sshd: pi [priv]
pi        6147  0.0  0.4  11812  4016 ?        S    02:53   0:03      \_ sshd: pi@pts/0
pi        6150  0.0  0.4   6172  4036 pts/0    Ss   02:53   0:00          \_ -bash
root      6172  0.0  0.3   7232  3336 pts/0    S    02:53   0:00          |   \_ sudo -Es
root      6176  0.0  0.4   6120  4180 pts/0    S    02:53   0:00          |       \_ /bin/bash
root      9772  0.0  0.3   7888  3076 pts/0    R+   11:20   0:00          |           \_ ps auxf
root      9773  0.0  0.0   3800   480 pts/0    S+   11:20   0:00          |           \_ less
pi        9745  0.2  0.1   3988  1872 ?        Ss   11:19   0:00          \_ scp -t /tmp/.
...

Observe a hierarquia pai / filho de scp , é um processo filho de ssh .

Anatomia de uma sessão scp

Se você der uma olhada no livro do OReilly SSH , há um diagrama que mostra a mecânica de como scp conexões funcionam.

Nodiagramaacima,vocêpodeverquequandoocomandoscp<file><server>:/<path>éexecutado,eleétraduzidoparaalgocomoistonoladodocliente:

/usr/bin/ssh-x-oForwardAgent=no-oPermitLocalCommand=no-oClearAllForwardings=yes--pi-holescp-t/tmp/.

Ocliente(scp)nestecasoestádirecionandoodaemonsshdnoladodoclienteparaenviarumasolicitaçãoaosshddoservidorinformandoqueeledeveexecutarscp-t/tmpnoladoremoto.

Combasenadocumentação,esteépordesigncomoscpusaotúneldoSSH.

Informaçõesadicionais

Eufizalgumasexperiênciasemquefizumacópiadoscpbinárioparamyscpe,emseguida,executeiissonocliente.Emcadainstância,ocomando/usr/bin/ssh...aindamostravao--someserverscp-t/tmp/..

Issomelevaaacreditarqueonomedoexecutávelscp,emborareferenciadopeloclientescpquandoocomandosshéexecutado,nãoépassadodiretamenteparaocliente.Emvezdisso,odaemonsshdtemosnomesdasváriasferramentasdoclientequeelesuporta,codificadosinternamentedentrodele.

Issoéfeitocomobackupdosdetalhesmostradosnoitemacima.

Conclusões

Nãoépossívelremovercompletamente/desativaradefiniçãode--with-default-pathaocompilarsshd.Removendo-ocompletamente,interrompeacapacidadedesshddeprocurarporscp-t<dir>quandoumaconexãoscpéacionada.

Omelhorquevocêpodefazerparaisolarsshdseriadesignarumdiretório,quecontémapenasosváriosbináriosquecompõemoOpenSSH.

Referências

  • livro OReilly SSH
por 06.07.2018 / 17:21
1

É óbvio que você deve ter o protocolo em ambas as instâncias para usá-lo. Se você quiser uma alternativa, pode fazer com ssh como abaixo.

ssh user@ip "cat > destination" < file.txt
    
por 06.07.2018 / 15:18