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.

k0pernikus
fonte
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
Gilles 'SO- parar de ser mau'
fonte
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
7

Tudo o que eu precisava fazer era adicionar minha chave pública à máquina remota:

cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"

E agora a scpguia é concluída.

Veja aqui se você precisa configurar suas chaves primeiro.

k0pernikus
fonte
7
Isto é o que ssh-copy-idé para, mais ele vai lidar com as permissões do arquivo para você.
Glenn Jackman
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.

fschmitt
fonte
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

Harry
fonte