Como habilitar o preenchimento automático para caminhos remotos ao usar o scp?


37

Copiei remotamente um arquivo para o meu laptop usando:

scp someFile USER@192.168.178.32:/home/USER/put/it/some/where/oh/damn/you/here

Quero poder concluir automaticamente o caminho remoto pressionando a guia.


11
Está habilitado rsync, o que, na minha opinião, é muito superior ascp
Marco Ceppi 3/12/12

3
É ativado por padrão em zsh.
Stéphane Gimenez

3
Também está ativado, pelo scpmenos funciona aqui. Você precisa de uma chave ssh já adicionada a um agente ssh.
enzotib 3/03/12

Respostas:


24

Verifique se você ativou o preenchimento automático sofisticado. Em muitas distribuições, isso significa que você ~/.bashrcprecisa conter . /etc/bash_completion.

Você precisará configurar a autenticação sem senha, ou seja, com uma chave já carregada ssh-agent.

O estabelecimento de uma conexão SSH é lento; portanto, você pode acelerar consideravelmente as conclusões estabelecendo uma conexão de uma vez por todas e usando essa conexão posteriormente. A maneira relativamente complicada de fazer isso é abrir uma conexão SSH principal ssh -N -M target-hostdepois de configurar as conexões mestre-escravo ~/.ssh/config; consulte Várias sessões ssh em comando único para obter instruções (você precisa das opções ControlMastere ControlPath).

O método simples é montar o sistema de arquivos remoto sobre SSHFS e usá-lo cpcom a conclusão normal do shell.

mkdir ~/remote
sshfs USER@192.168.178.32:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here

Parece que há algo na /etc/bash_completionfonte ~/.bash_completion. Quero poder ter esse recurso em um servidor remoto para o qual não posso gravar /etc/e não existe /etc/bash_completion(embora exista /etc/bash_completion.d/. Existe uma versão que seria segura para ser executada no meu diretório pessoal? Há pelo menos uma referência a ~ / .bash_completion então eu tenho medo há mais estou em falta e poderia haver um circuito cíclico ou qualquer outra coisa que pode causar erros.
redbmk


2

Você pode mudar para lftp em vez de usar scp. Ele fornece uma interface consistente e agradável para transferência de arquivos via ftp, sftp e ssh, incluindo o preenchimento automático que você está procurando e muito mais (ou seja, curingas).

lftp fish: // usuário @ máquina

abre uma conexão através do ssh como você faz acima com o scp. Muitas máquinas também suportam sftp: //, o que é ainda melhor na minha experiência.


0

Como o @Giles disse , verifique se a instalação foi concluída automaticamente corretamente, se você tem a tecla ssh na máquina.

Adicionar essa configuração ao meu ~/.ssh/configfez uma enorme diferença na velocidade.

Host *
 ControlMaster auto
 ControlPath ~/.ssh/master-socket/%r@%h:%p
 ControlPersist 10s

Isso criará uma conexão mestre para cada host.

O 10s persistir dará algum tempo para ver o diretório antes que a conexão seja fechada automaticamente.

Sem a persistência, você terá que recriar uma conexão e isso atrasará a conclusão da guia.

Exemplo

~$ scp mymachine:~/pa ABA

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to ABA

~$ scp mymachine:~/path/to/file ABA

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.