Проблема в следующем: я хочу скопировать файлы с удаленного компьютера.
Я ищу способ написать сценарий оболочки, который будет подключаться к удаленному компьютеру, получить местоположение сохраненного файла, как только я отключу местоположение от удаленного сервера и использую scp изнутри локального компьютера с полученным местоположением для скопируйте файл.
В частности, я хочу знать, как из сценария я могу подключиться к удаленному компьютеру, выполнять задачи на нем. Отключитесь и продолжите выполнение локально.
Вы можете написать сценарий в следующем формате:
command1
command2
...
ssh user@machine command3
...
command4
command5
Вам необходимо настроить ключи SSH, чтобы получить command3
выполняется без запроса пароля.
Решение 1:
remote_output="$(ssh user@host "remote command")"
scp "user@$host:$remote_output" /local/path
Это работает путем подключения к удаленному компьютеру, выполнения некоторых команд и копирования вывода в переменную на вашем локальном компьютере. Скажем, удаленное отображение пути к файлу, захват его локально.
Решение 2:
ssh user@host "determine_path; cat filename" >local_filename
Это работает путем поиска и вывода файла непосредственно с удаленного компьютера и перенаправления его в файл локально. Это пропускает scp. Для этого необходимо, чтобы шаги до "cat" не выводились (что можно решить с помощью &> / dev / null).
Я предполагаю, что у вас уже есть некоторое представление о том, как вы идентифицируете файл, который хотите скопировать, и что вы можете или уже написали сценарий или набор команд, которые будут выполняться на удаленном компьютере, который выполняет эту идентификацию. .
Кроме того, я также предполагаю, что эти команды выводят на стандартный вывод полный путь к файлу или относительный путь к файлу относительно домашнего каталога пользователя SSH, используемого для копирования. В моем примере имя сценария - "getfilepath.sh", хотя это не обязательно должен быть сценарий оболочки, это может быть другой исполняемый файл или даже серия команд.
# Script to be executed on local machine.
# put any leading local commands here.
FILE=$(ssh user@emote getfilepath.sh);
scp user@remotehost:"$FILE" .
# put any trailing local commands here.
В приведенном выше коде обозначение «$ ()» - это способ захвата стандартного вывода команды в виде переменной оболочки. Это довольно стандартно, но если вы используете оболочку, которая ее не понимает, вы можете вместо этого заключить команду в "обратные галочки", которые являются знаками ударения слева от клавиши 1 на большинстве клавиатур США.
возможно, можно запустить запланированную задачу на удаленном компьютере, который выполняет всю работу.
Это помешает вам подключиться к удаленному компьютеру во время поиска файлов, которые вы хотите скопировать.
Я делаю это:
Командная строка запускает запланированную задачу, которая в моем случае выполняет пакетный сценарий.
schtasks /run /s remoteserver /u %user% /p %password% /tn "scheduledtaskname"
С уважением