Назад | Перейти на главную страницу

Завершение вкладки имени файла SCP

Я регулярно использую SCP для перемещения файлов между серверами, и до меня доходили слухи, что вы можете использовать завершение табуляции на удаленном сервере, если используете открытые ключи, но пока мне не повезло.

Я пытаюсь достичь следующего:

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

An ls на удаленном сервере /dir/ откроет 3 папки:

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

Я бы хотел, чтобы SCP показывал, какие папки совпадают (если есть), как при обычном завершении пути при навигации по локальной файловой системе. Завершение табуляции работает с локальными путями в scp командная строка, но я заметил, что когда путь для удаленного компьютера совпадает с локальным (например, "~ /"), он завершает / предлагает файлы / папки из локальной файловой системы, а не из удаленной.

Для входа без пароля выполните следующие действия:

`ssh remote.ip.address`

... поэтому я знаю, что ключи настроены правильно. Есть идеи, как заставить это работать?

Какую оболочку вы используете? Если вы используете bash, вам может потребоваться включить "расширенное" завершение в bash ...

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

В вашем ~ / .bashrc

В OSX вы можете:

$ sudo port install bash-completion

В ваш ~ / .profile добавьте:

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

Если кто-то хочет сделать это для Mac OSX Mountain Lion с помощью метода rkthkr, он должен установить порты Mac (http://www.macports.org/install.php) сначала запустите упомянутую команду:

$ sudo port install bash-completion

затем настройте их терминальное приложение в соответствии с этими инструкциями, найденными здесь: https://trac.macports.org/wiki/howto/bash-completion

Я настоятельно рекомендую использовать yafc.

Он поддерживает завершение имени файла, а также имеет некоторые другие полезные функции (например, рекурсивный get / put / fxp / ls / rm)

Другое, возможно, более простое решение - использовать sshfs.

Это клиент файловой системы, основанный на протоколе передачи файлов SSH. Поскольку большинство серверов SSH уже поддерживают этот протокол, его очень легко настроить: то есть на стороне сервера делать нечего. На стороне клиента смонтировать файловую систему так же просто, как войти на сервер с помощью ssh.

Это предохранитель на основе файловой системы, которая связывает вашу удаленную папку с локальной. Под капотом используется scp, но вы можете управлять cp команда, как при копировании файлов на локальный компьютер. Таким образом, завершение табуляции работает автоматически! sshfs доступен для большинства дистрибутивов, например делать sudo apt-get install sshfs (это также загружает fuse модуль ядра)

Начни так:

$ sudo mkdir /mnt/server1
$ sudo chown local-username /mnt/server1
$ sshfs remote-username@server1.example.com:/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 .