Conclusão da guia Nome do arquivo SCP

13

Eu uso o SCP regularmente para mover arquivos entre servidores e ouvi rumores de que você pode usar o preenchimento de guias no servidor remoto se estiver usando chaves públicas, mas até agora não tive sorte.

O que estou tentando realizar é o seguinte:

scp -r remote.ip.address:/remote/dir/folder<TAB> /local/destiation/

Um lsno servidor remoto de /dir/revelaria 3 pastas:

/remote/dir/folder_1
/remote/dir/folder_2
/remote/dir/folder_3

Eu gostaria que o SCP revelasse quais pastas correspondem (se houver), assim como a conclusão do caminho normal ao navegar no sistema de arquivos local. O preenchimento de tabulação funciona nos caminhos locais na scplinha de comando, mas notei que quando o caminho da máquina remota corresponde ao local (ou seja: "~ /"), ele conclui / sugere arquivos / pastas do sistema de arquivos local. que o controle remoto.

A execução do seguinte funciona para logon sem senha:

`ssh remote.ip.address`

... então eu sei que as chaves estão configuradas corretamente. Alguma idéia de como fazer isso funcionar?

rkthkr
fonte
Apenas usada isso - omgbbq
William Entriken

Respostas:

16

Qual shell você está usando? Se você estiver usando o bash, talvez seja necessário ativar conclusões "avançadas" no bash ...

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

No seu ~ / .bashrc

No OSX, você pode fazer:

$ sudo port install bash-completion

Ao seu ~ / .profile, adicione:

if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi
rkthkr
fonte
Estou usando o OSX como estação de trabalho, esse arquivo não existe. No entanto, estou assumindo que, com qualquer distrubtion, preciso instalar o pacote bash-complete para que isso funcione?
Vou atualizar a minha resposta ..
rkthkr
Acabei de terminar essas etapas sozinho, tudo funciona bem. Obrigado companheiro!
Sem problemas, feliz em ajudar!
Rkthkr 16/06/09
1
Obviamente, a parte de instalação da porta para o OS X funcionará apenas se você tiver instalado o pacote MacPorts (www.macports.org). E acho que há um pacote disponível se você usar o fink em vez do MacPorts.
Sven
2

Se alguém quiser fazer isso no Mac OSX Mountain Lion com o método rkthkr, precisará instalar primeiro as portas do Mac ( http://www.macports.org/install.php ), execute o comando que ele mencionou:

$ sudo port install bash-completion

em seguida, configure seu aplicativo de terminal de acordo com estas instruções encontradas aqui: https://trac.macports.org/wiki/howto/bash-completion

Shawn Conn
fonte
Quando você tem reputação suficiente para deixar comentários, acréscimos às respostas existentes geralmente funcionam melhor com elas. (se você não está indo para editar as respostas)
Andrew B
Obrigado. Era isso que eu queria fazer, mas, como você mencionou, eu não tinha representante suficiente para fazê-lo.
perfil completo de Shawn Conn
0

Outra solução, talvez mais simples, é usar sshfs .

Este é um cliente do sistema de arquivos baseado no SSH File Transfer Protocol. Como a maioria dos servidores SSH já suporta esse protocolo, é muito fácil de configurar: ou seja, no lado do servidor, não há nada a fazer. No lado do cliente, montar o sistema de arquivos é tão fácil quanto fazer login no servidor com ssh.

É um sistema de arquivos baseado em fusíveis que vincula sua pasta remota a uma local. Sob o capô, scp é usado, mas você pode operar o cpcomando da mesma forma que copia arquivos na sua máquina local. Assim, o preenchimento de guias funciona automaticamente! O sshfs está disponível para a maioria das distribuições, por exemplo, faça sudo apt-get install sshfs(isso também carrega o fusemódulo do kernel)

Comece assim:

$ sudo mkdir /mnt/server1
$ sudo chown local-username /mnt/server1
$ sshfs [email protected]:/home/remote-username /mnt/server1
$ ls /mnt/server1
 .. <bunch of files> ...
$ cp /mnt/server1/.bash<tab><tab>
.bash_history  .bash_logout   .bashrc
$ cp /mnt/server1/.bashrc .
Sebastian
fonte
0

Eu recomendo fortemente o uso do yafc .

Ele suporta a conclusão de nomes de arquivos e também possui outros recursos úteis (por exemplo, get / put / fxp / ls / rm recursivos)

jamespo
fonte