Eu tenho uma série de arquivos de software baixados no meu subdiretório ~/Downloads
no meu computador pessoal. Também estou usando o bash para conectar-me remotamente a um computador usando ssh
.
É possível transferir esse arquivo via ssh
para o computador remoto?
this file
) e vários arquivos (a series of software files
), a melhor solução depende se você possui um único arquivo ou vários arquivos.Respostas:
Você pode usar
scp
para esse fim. É um meio seguro de transferir arquivos usando o protocolo SSH.Por exemplo, para copiar um arquivo nomeado
yourfile.txt
de~/Downloads
para um computador remoto, use:Você pode ver mais exemplos aqui .
fonte
rsync
o trabalho pode muito bem, agora que penso nissoscp
acima porrsync
e deve funcionar muito bem.rsync
para tudo, até arquivos únicos, porque "simplesmente funciona" nos casos simples e pode ser muito mais eficiente em outros casos. Se estiver usando algoscp
ou aindarsync
não compactado e / ou criptografado, lembre-se de ativar a opção de compactação (-C
parascp
,-z
ou--compress
pararsync
). Na verdade, eu o ligo por hábito - é muito raro você encontrar uma circunstância em que isso diminui a velocidade (talvez se você estiver usando um dispositivo lento de baixa potência com poder de CPI limitado, como um rPi).Embora
scp
seja claramente a ferramenta certa para isso, se por algum motivo você não puder usá-lo, poderá fazer algo como o seguinte na sua máquina local para copiar, por exemplo, uma estrutura de diretórios para a máquina remota:Este será
tar
o diretório atual na máquina local, e escrever quetar
astdout
que será então canalizada para umssh
comando onde ele irá executar um comando remoto para descompactar o arquivo que ele lê a partirstdin
Editado para refletir o comentário de Dietrich Epp sobre
-f -
o padrão na criação e extração, para que não seja necessário especificar explicitamente.fonte
-C basedir
argumento paratar
extrair outro lugar que não seja o seu diretório pessoal, se estiver fazendo isso.Se você quiser fazer isso em mais do que uma ocasião rara, sugiro montar o sistema de arquivos remoto
sshfs
se estiver usando um tipo Unix que suporte FUSE (Linux, * BSD, Mac OS X). Crie um diretório em seu diretório pessoal, digamos, chamado ~ / remote-server:Em seguida, monte o sistema de arquivos remoto com
sshfs
. Substitua "ourserver.com" pelo nome do host da sua máquina remota e "nome do diretório remoto" pelo diretório que você está usando no sistema remoto.Feito isso, o diretório remoto faz parte do seu sistema de arquivos e você pode usar todas as suas ferramentas normais, incluindo
cp
:Se você ainda não o
sshfs
instalou, poderá instalá-lo no seu computador usando o gerenciador de pacotes (procure pacotes com o nomesshfs
oufuse-sshfs
). Para mais informações, você pode ler um tutorial online .A propósito, essa é a minha maneira favorita de gerenciar arquivos em servidores remotos. Normalmente, mantenho um servidor de produção e dois servidores de desenvolvimento montados dessa maneira e uso meu fluxo de trabalho normal de navegação de arquivos com eles.
fonte
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other
e-C
para compactação, se a largura de banda for ruim. Assim que funciona bem, eu adiciono pessoalmente aliases para os comandos para montar rapidamente os sistemas de arquivos distantes no ssh. @Benjamin_Staton Eu não usaria sudo ou root aqui, não sem pelo menos um mapeamento de usuário / grupo adequado.Na primeira vez, não há diferença real entre
scp
(copiarssh
) ersync
.As execuções subsequentes se beneficiarão se o rsync não copiar arquivos que já existem.
-a
para todos os arquivos-v
para verboso-H
para "apenas descubra links simbólicos e faça a coisa certa"Outros sinalizadores úteis incluem:
--delete
para excluir arquivos no destino que não existem mais na origem.--dry-run
para teste - muito útil quando combinado com--delete
.Isso usará
ssh
chaves para fazer um login sem senha também, se você as tiver configurado.No final da execução,
rsync
você informará quantas vezes mais rápido acabou fazendo a cópia simples novamente.fonte
-H
é realmente para links físicos, impede que o mesmo conteúdo seja enviado duas ou mais vezes quando estiver vinculado a mais de um local na estrutura de diretórios de origem (mas pode tornar o processo menos eficiente para grandes estruturas de diretórios). não afeta os links simbólicos, mas algumas das opções incluídas por-a
/--archive
afetam como os links simbólicos são processados.Para adicionar às respostas acima. Às vezes, não tenho exatamente certeza sobre o caminho remoto. Nesses casos, eu uso
sftp
para navegar primeiro para o local necessário e, em seguida, usar get ou put para realmente baixar ou fazer upload de um arquivo.Se você também deseja manter algo sempre sincronizado e até mesmo executar localmente algum arquivo localizado na máquina remota,
sshfs
funciona muito bem.fonte
Estou fazendo algo muito semelhante com o ssh. Criei uma ferramenta de compilação personalizada para o Visual Studio e, basicamente, o VS executa um comando ssh que copia meu código em um computador de destino e o compila nesse computador de destino.
Observe o uso de aspas simples e ponto-e-vírgula. O primeiro encapsula seus comandos para o hostB via ssh e o último permite executar vários comandos do sistema hostB em um comando ssh do hostA.
Para que isso funcione, você precisará configurar as chaves ssh em sua máquina inicial para poder ser usuário A @ hostA e efetuar login no hostB como usuárioB. O processo para criar uma chave ssh pública para userA @ hostA está bem documentado. Se você não criar uma chave pública no hostA para o usuárioA e copiar essa chave para o hostB como usuárioB, será forçado a inserir sua senha todas as vezes - o que arruina a alegria da automação.
fonte