2016-02-13 2 views
0

Есть аналогичные вопросы о stackoverflow, но они либо не имеют ответа, либо используют какой-либо язык (C#, Python, ...). Я пытаюсь выполнить команду на удаленной машине с помощью ssh и вернуть выход консоли на локальный компьютер. Ниже команда У меня возникли проблемы:Выполнять команду внутри сценария оболочки на удаленной машине и получать выходные данные на локальном компьютере

sshpass -p $password 'find /home/pi/Transmission_Downloads/ -type f \(-iname "*.mp4" -o -iname "*.mkv" -o -iname "*.avi" \) -newermt "2016-02-01"' [email protected] 

Когда я пытаюсь выполнить его в моем сценарии я получаю «sshpass: Не удалось выполнить команду: Нет такого файла или каталога» ошибки.

Что я пытаюсь достичь: извлеките с сервера список новых загруженных файлов (фильмы и телешоу), чтобы позже вытащить их с сервера с помощью rsync.

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

Моя локальная машина использует Ubuntu 14.04 (рабочий стол), а на моем сервере работает Raspbian.

ответ

1

Настройка пароля менее логин на ваш удаленный компьютер может быть решением для легкого выполнения задачи.

Сначала войдите в систему Sys_A как пользователь a и создайте пару ключей аутентификации. Не вводите ключевую фразу:

[email protected]_A:~> ssh-keygen -t rsa 
Generating public/private rsa key pair. 
Enter file in which to save the key (/home/a/.ssh/id_rsa): 
Created directory '/home/a/.ssh'. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/a/.ssh/id_rsa. 
Your public key has been saved in /home/a/.ssh/id_rsa.pub. 
The key fingerprint is: 
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 [email protected] 

Теперь использовать SSH, чтобы создать каталог ~/.ssh как пользователь B на Sys_B. (Каталог уже существует, и это хорошо):

[email protected]_A:~> ssh [email protected] mkdir -p .ssh 
[email protected]_B's password: 

Наконец добавляет символ нового открытого ключа в б @ Sys_B: .ssh/authorized_keys и ввести пароль в последний раз Б:

[email protected]_A:~> cat .ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys' 
[email protected]_B's password: 

С этого момента на вас может войти в Sys_B в Ъ от Sys_A в виде без пароля:

[email protected]_A:~> ssh [email protected]_B 

Тогда вы можете интегрировать команду в Баш скрипт, и использовать ssh без какого-либо взаимодействия с пользователем.

+0

Проблема в том, что мне придется создавать общедоступные/закрытые ключи для каждого компьютера, который мне нужен для перемещения файлов. Есть ли способ достичь этого с помощью пароля (например, sshpass)? –

+0

Другой способ сделать это может быть «ожидать», см.: [Использовать в сценарии bash для указания пароля для команды SSH] (http://stackoverflow.com/questions/4780893/use-expect-in-bash- сценарий к предоставлять-пароль-к-SSH-команды). Сколько компьютеров вы имеете дело? Для 5-10 компьютеров настройка SSH-ключей будет довольно быстрой, и после этого все будет очень просто. И прежде всего ключи SSH более безопасны, чем отправка сырых паролей по сети. –

+0

Является ли это только мной, или используя SSH-ключи, добавляет небольшую задержку (1 ~ 3 секунды) во время авторизации? –