Quero baixar um arquivo de uma sessão SSH ativa. Em muitos casos, eu provavelmente poderia simplesmente usar SFTP, scp
, rsync
et al, mas há momentos em que tenho elevados permissões no servidor remoto de uma maneira que não pode usar esses métodos.
Se você está lutando para entender o que quero dizer, imagine que você queria baixar algo de /root/
ou /var/log/auth.log
. O login raiz está desativado (porque não somos idiotas). Como você consegue esse arquivo? Copiá-lo para um lugar menos protegido e depois movê-lo? Isso é desajeitado. Também existem cenários em que o caminho remoto é complexo ou temporário, ou nem é um caminho, porque desejo que a saída de um comando remoto seja armazenada localmente. Armazene remotamente e copie? Clunk!
Existem várias maneiras mais complicadas de obter versões dessas, mas em um mundo ideal, eu teria algo parecido com o acesso local de gravação do servidor remoto, usando a sessão SSH existente como um canal. Algo como (isso é apenas a impressão de um artista):
$oli@remote: cp /root/cheesecake /local/
E isso apenas aparece no meu local cwd
. E o acesso bidirecional não seria uma coisa ruim.
Faz oito longos anos desde que fiz essa pergunta e vimos uma verdadeira variedade de clunk, mas continua sendo um problema com o qual ainda luto ocasionalmente.
Refatorei a pergunta para algo muito mais idealista. Compreendo perfeitamente que atualmente não haja uma resposta perfeita. Todos os esforços passados e futuros em direção ao meu ideal são apreciados.
zssh
provavelmente é o mais próximo do fluxo de trabalho do tipo zmodem que você pode estar se lembrando.Respostas:
Convém verificar o zssh , que está disponível no universo e, portanto, disponível com
sudo apt-get install zssh
Você precisa dele no seu servidor ubuntu e no seu cliente, mas basicamente quando está logado com o zssh, basta clicar em 'ctrl- @' e ele exibe o "Modo de transferência de arquivo", que permite enviar arquivos de volta pelo canal para o seu máquina cliente ou carregue-os do cliente para o servidor.
No entanto, você não precisa autenticar novamente ou abrir uma nova janela para o scp.
Se você estiver usando chaves ssh e um agente ssh, poderá fazer com facilidade:
Qual será o segundo plano ssh, e então
scp $!:/whatever/whatever .'
Depois que o arquivo for transferido,
fg
volte ao ssh.Se você não estiver usando as teclas ssh, ainda poderá usar as opções "ControlMaster" e "ControlPath" adicionadas às versões recentes do OpenSSh, mas isso fica complicado, verifique man ssh_config
fonte
Supondo que você esteja executando um servidor ssh na área de trabalho (existem maneiras de contornar isso, mas acho que todos eles acrescentam complexidade e possivelmente têm problemas de segurança), você pode configurar um túnel ssh reverso. Veja SSH copiar facilmente o arquivo para o sistema local. sobre a unix.SE .
~C
Enter-R 22042:localhost:22
Enterpara criar um encaminhamento de porta reversa do servidor para a área de trabalho (22042 pode ser qualquer número de porta entre 1024 e 65534 que não esteja em uso).scp -P 22042 foo localhost:
, copiará o arquivofoo
em seu diretório atual no servidor para sua casa na área de trabalho.~
Ctrl+ Zmv ~/foo .
Enterfg
Enter.As sequências de escape ssh começam com
~
; o til só é reconhecido após uma nova linha.~ Ctrl+Z
coloca ssh em segundo plano.~C
entra em uma linha de comando onde você pode criar ou remover um encaminhamento.fonte
Eu vim com uma maneira de fazer isso com o ssh padrão. É um script que duplica a conexão ssh atual, localiza seu diretório de trabalho na máquina remota e copia de volta o arquivo especificado para a máquina local. Ele precisa de 2 scripts muito pequenos (1 remoto, 1 local) e 2 linhas na sua configuração ssh. Os passos são os seguintes:
Adicione estas 2 linhas ao seu
~/.ssh/config
:Agora, se você tiver uma conexão ssh com o machineX aberta, não precisará de senhas para abrir outra.
Crie um script de 1 linha na máquina remota chamada
~/.grabCat.sh
Crie um script na máquina local chamado ~ / .grab.sh
e crie um alias para grab.sh em (
~/.bashrc
ou em qualquer outro lugar):É isso, tudo feito. Agora, se você estiver conectado
machineX:/some/directory
, inicie um novo terminal e digiteIsso coloca o arquivo no seu diretório de trabalho atual na máquina local. Você pode especificar um local diferente como terceiro argumento para "agarrar".
Nota: Obviamente, ambos os scripts devem ser "executáveis", ie
chmod u+x filename
.fonte
Se a sua máquina cliente (a máquina em que você está sentado) for chamada machineA e a máquina na qual você está atualmente com SSH for chamada machine B. MachineA, sua máquina local deverá ter o SSHD em execução e a porta 22 aberta. Então:
Cópias
myfile
no MachineB no diretório inicial do MachineA no machineA. Isso pressupõe identificação do usuário / senha iguais.Copia
myfile
um MachineB para/newdir/newname
no machineA. Isso pressupõe identificação do usuário / senha iguais.Obtém uma cópia
otherfile
do meu diretório MachineA na MachineA e a coloca no meu diretório de trabalho atual na máquina MachineB (designada no modo UNIX padrão pelo caractere "ponto" (.)). Isso pressupõe identificação do usuário / senha iguais.Se o ID do usuário / senha não forem os mesmos, use:
scp myfile user@MachineA:
para obter arquivo.scp user@MachineA:/path/to/my/otherfile .
colocar arquivosNOTAS sobre SCP:
Assim como o
cp
comando,scp
tem uma opção -p para propagar as configurações de permissão do arquivo original para a cópia (caso contrário, a cópia é feita com as configurações normais para novos arquivos) e uma opção -r para copiar uma árvore de diretório inteira com um comando.scp
cria um canal de dados criptografados completamente transparente entre as duas máquinas, para que os dados binários (como imagens ou programas executáveis) sejam preservados corretamente. Isso também significa quescp
não é possível executar a conversão automática de final de linha entre diferentes tipos de sistemas operacionais, como pode ser feito com o ftp no modo "ascii". Isso não será um problema ao copiar entre sistemas Unix, que usam a mesma convenção de fim de linha.fonte
se você acessar o servidor via ssh, também poderá se conectar via sftp. Mantenha o cliente filezilla (GUI) à mão e cole o caminho em que você está atualmente
fonte
Se o seu arquivo for pequeno o suficiente, você poderá codificá-lo com base64 e decodificá-lo localmente:
Resposta original de onde eu peguei isso (e testei) em: https://unix.stackexchange.com/a/2869/194134
fonte
Não está na conexão SSH ativa, mas o scp copia os arquivos usando os mesmos mecanismos e permissões que o ssh.
fonte
get file
e que apareça magicamente na minha máquina local. Se for necessário fazer isso através de algum serviço encapsulado em SSH, que assim seja ... Mas deve ser vinculado à sessão.sshd
execução e, portanto, você deve poder usarscp
na linha de comando do servidor para enviar arquivos de volta ao cliente. Há tanta mágica para dar a volta; às vezes ainda precisamos apertar os botões. A solução FileZilla também é útil.Isso não é possível com uma sessão ssh padrão, mas você pode usar um script em vez do ssh, que inicia algo como um servidor ftp ou rsh simples no sistema local e executa o ssh com as opções necessárias para configurar um túnel de volta à sua área de trabalho para conectar a este servidor.
fonte
konsole
possui essa capacidade através do menu "Editar-> Upload do ZModem" enquanto você estiver em uma sessão remota (ou Ctrl-Alt-U).Observe: o pacote
lrzsz
deve ser instalado primeiro. Para mim, parece que funciona apenas para o upload de arquivos ASCII.fonte
Como você está se conectando a partir de uma área de trabalho, acho que você pode abrir um segundo terminal.
É assim que costumo fazer:
realpath myfile
ou outroreadlink -f myfile
(versões mais antigas do Ubuntu não pré-instalamrealpath
) e copio-o.scp
ousftp
para obter o arquivo, colando o caminho completo que obtive antes. Por exemplo:scp user@host:/etc/some/file ./
É bastante básico, mas também é fácil de lembrar e não precisa de nenhum pacote extra para funcionar.
fonte
Surpreendentemente, não vejo nenhuma menção ao bom e velho comandante da meia-noite aqui. Na minha opinião, é provavelmente o gerenciador de arquivos mais universal e útil para shell com recursos de energia, uma das ferramentas "necessárias" para o caso, o que também permite que você se conecte através de SSH, FTP e SFTP, enquanto estiver No segundo painel, você pode abrir qualquer outro sistema de arquivos (local) e trabalhar com arquivos livremente.
Tudo que você precisa é: apt-get install mc (from universe)
Depois disso, execute mc, abra o menu do painel esquerdo ou direito, escolha a conexão shell, digite o nome de usuário @ remote-ip, a senha - na verdade, é isso. Copie (aqui: download) arquivos / pastas de uma máquina para outra com F5, mova-se com F6 e assim por diante, de acordo com os botões abaixo. Para usuários antigos do MS: assim como no NC for DOS
fonte
MUITO pensando demais, pessoal. Eu estava procurando por todas as respostas profundas, sombrias e complexas também. Acontece que você pode fazer isso diretamente do Dolphin diretamente da lata. fish: // nome_do_usuário @ servidor: porta
fonte