Bagaimana mengaktifkan pelengkapan otomatis untuk jalur jauh saat menggunakan scp?

37

Saya menyalin file ke laptop saya menggunakan:

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

Saya ingin dapat melengkapi jalur jauh secara otomatis dengan menekan tab.

k0pernikus
sumber
1
Ini diaktifkan untuk rsync, yang menurut saya jauh lebih unggul daripadascp
Marco Ceppi
3
Diaktifkan secara default di zsh.
Stéphane Gimenez
3
Ini diaktifkan untuk scpjuga, setidaknya itu berfungsi di sini. Anda memerlukan kunci ssh yang sudah ditambahkan ke agen ssh.
enzotib

Jawaban:

24

Pastikan Anda telah mengaktifkan pelengkapan otomatis mewah. Pada banyak distribusi, ini berarti ~/.bashrckebutuhan Anda mengandung . /etc/bash_completion.

Anda harus mengatur otentikasi tanpa kata sandi, yaitu dengan kunci yang sudah dimuat ssh-agent.

Membuat koneksi SSH lambat, sehingga Anda dapat mempercepat penyelesaian dengan membuat koneksi sekali dan untuk semua dan menggunakan koneksi itu sesudahnya. Cara yang relatif rumit untuk melakukannya adalah dengan membuka koneksi SSH master dengan ssh -N -M target-hostsetelah mengatur koneksi master-slave di ~/.ssh/config; lihat beberapa sesi ssh dalam satu perintah untuk instruksi (Anda memerlukan ControlMasterdan ControlPathopsi).

Metode sederhana adalah dengan memasang sistem file jarak jauh melalui SSHFS dan digunakan cpdengan penyelesaian shell normal.

mkdir ~/remote
sshfs USER@192.168.178.32:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Sepertinya ada sesuatu dalam /etc/bash_completionsumber ~/.bash_completion. Saya ingin dapat memiliki fitur ini pada server jauh di mana saya tidak dapat menulis /etc/dan tidak ada /etc/bash_completion(meskipun ada /etc/bash_completion.d/. Apakah ada versi yang aman untuk dijalankan dari direktori home saya? Setidaknya ada satu referensi ke ~ / .bash_completion jadi saya khawatir masih ada lagi yang saya lewatkan dan mungkin ada siklus
berulang
2

Anda bisa beralih ke lftp daripada menggunakan scp. Ini memberi Anda antarmuka konsisten yang bagus untuk transfer file melalui ftp, sftp dan ssh termasuk autocomplete yang Anda cari dan banyak lagi (yaitu wildcard).

ikan lftp: // user @ machine

membuka koneksi melalui ssh seperti yang Anda lakukan di atas dengan scp. Banyak mesin mendukung sftp: // juga yang bahkan lebih bagus dalam pengalaman saya.

fschmitt
sumber
0

Seperti @Giles telah mengatakan , pastikan Anda memiliki setup auto complete benar harus memiliki kunci Anda ssh pada mesin.

Menambahkan konfigurasi ini ke saya ~/.ssh/configmembuat perbedaan besar dalam kecepatan.

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

Ini akan membuat koneksi master untuk setiap host.

10-an yang bertahan akan memberi Anda waktu untuk melihat direktori sebelum koneksi ditutup secara otomatis.

Tanpa persisten, Anda harus membuat ulang koneksi dan itu akan memperlambat penyelesaian tab Anda.

Contoh

~$ scp mymachine:~/pa TAB

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to TAB

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

Harry
sumber