Làm cách nào để bật tự động hoàn thành cho các đường dẫn từ xa khi sử dụng scp?


37

Tôi từ xa sao chép một tập tin vào máy tính xách tay của tôi bằng cách sử dụng:

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

Tôi muốn có thể tự động hoàn thành đường dẫn từ xa bằng cách nhấn tab.


1
Nó được kích hoạt rsync, theo ý kiến ​​của tôi là vượt trội hơn nhiều so vớiscp
Marco Ceppi

3
Nó được bật theo mặc định trong zsh.
Stéphane Gimenez ngày

3
Nó cũng được kích hoạt scp, ít nhất là nó hoạt động ở đây. Bạn cần một khóa ssh đã được thêm vào một tác nhân ssh.
enzotib

Câu trả lời:


24

Hãy chắc chắn rằng bạn đã bật chế độ tự động hoàn thành ưa thích. Trên nhiều bản phân phối, điều này có nghĩa là ~/.bashrcnhu cầu của bạn cần chứa . /etc/bash_completion.

Bạn sẽ cần phải thiết lập xác thực không mật khẩu, tức là với một khóa đã được tải ssh-agent.

Việc thiết lập kết nối SSH rất chậm, do đó bạn có thể tăng tốc đáng kể việc hoàn thành bằng cách thiết lập kết nối một lần và mãi mãi và sử dụng kết nối đó sau đó. Cách tương đối phức tạp để làm điều đó là mở kết nối SSH chính ssh -N -M target-hostsau khi thiết lập kết nối chủ-nô trong ~/.ssh/config; xem Nhiều phiên ssh trong lệnh đơn để biết hướng dẫn (bạn cần ControlMasterControlPathcác tùy chọn).

Phương pháp đơn giản là gắn kết hệ thống tệp từ xa qua SSHFS và sử dụng cpvới hoàn thành trình bao bình thường.

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

Có vẻ như có một cái gì đó trong /etc/bash_completionnguồn ~/.bash_completion. Tôi muốn có thể có tính năng này trên một máy chủ từ xa nơi tôi không thể viết thư /etc/và không có /etc/bash_completion(mặc dù có /etc/bash_completion.d/. Có phiên bản nào an toàn để chạy từ thư mục nhà của tôi không? Có ít nhất một tham chiếu đến ~ / .bash_completion vì vậy tôi sợ có nhiều hơn tôi bị thiếu và có thể có một vòng lặp theo chu kỳ hoặc một cái gì đó có thể gây ra lỗi.
redbmk


2

Bạn có thể chuyển sang lftp thay vì sử dụng scp. Nó cung cấp cho bạn một giao diện nhất quán đẹp để truyền tệp qua ftp, sftp và ssh bao gồm tự động hoàn thành mà bạn đang tìm kiếm và hơn thế nữa (ví dụ: ký tự đại diện).

cá lftp: // user @ machine

mở một kết nối qua ssh như bạn làm ở trên với scp. Nhiều máy hỗ trợ sftp: // quá đẹp hơn theo kinh nghiệm của tôi.


0

Giống như @Giles đã nói , hãy đảm bảo bạn đã thiết lập tự động hoàn tất đúng cách có khóa ssh trên máy.

Thêm cấu hình này vào tôi ~/.ssh/configđã tạo ra một sự khác biệt lớn về tốc độ.

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

Điều này sẽ tạo ra một kết nối chính cho mỗi máy chủ.

Việc duy trì 10 giây sẽ cho bạn một chút thời gian để xem thư mục trước khi kết nối được tự động đóng lại.

Nếu không có sự kiên trì, bạn sẽ phải tạo lại một kết nối và nó sẽ làm chậm quá trình hoàn thành tab của bạn.

Thí dụ

~$ scp mymachine:~/pa CHUYỂN HƯỚNG

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to CHUYỂN HƯỚNG

~$ scp mymachine:~/path/to/file CHUYỂN HƯỚNG

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.