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ádirecionandoodaemonsshd
noladodoclienteparaenviarumasolicitaçãoaosshd
doservidorinformandoqueeledeveexecutarscp-t/tmp
noladoremoto.
Combasenadocumentação,esteépordesigncomoscp
usaotúneldoSSH.
Informaçõesadicionais
Eufizalgumasexperiênciasemquefizumacópiadoscp
binárioparamyscp
e,emseguida,executeiissonocliente.Emcadainstância,ocomando/usr/bin/ssh...
aindamostravao--someserverscp-t/tmp/.
.
Issomelevaaacreditarqueonomedoexecutávelscp
,emborareferenciadopeloclientescp
quandoocomandossh
éexecutado,nãoépassadodiretamenteparaocliente.Emvezdisso,odaemonsshd
temosnomesdasváriasferramentasdoclientequeelesuporta,codificadosinternamentedentrodele.
Issoéfeitocomobackupdosdetalhesmostradosnoitemacima.
Conclusões
Nãoépossívelremovercompletamente/desativaradefiniçãode--with-default-path
aocompilarsshd
.Removendo-ocompletamente,interrompeacapacidadedesshd
deprocurarporscp-t<dir>
quandoumaconexãoscp
éacionada.
Omelhorquevocêpodefazerparaisolarsshd
seriadesignarumdiretório,quecontémapenasosváriosbináriosquecompõemoOpenSSH.
Referências