Проблема в следующем: я хочу скопировать файлы с удаленной машины.
Я ищу способ написать сценарий оболочки, который бы подключался к удаленному компьютеру, получал местоположение сохраненного файла, как только я отключу местоположение от удаленного сервера и использую scp на локальном компьютере с полученное место для копирования файла.
В частности, я хочу знать, как из сценария, Я подключался к удаленной машине, выполнял задачи на этой машине. Отключитесь и продолжите выполнение локально.
Решение 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).
Вы можете написать сценарий в следующем формате:
command1
command2
...
ssh user@machine command3
...
command4
command5
Вам нужно настроить SSH-ключи, чтобы command3
выполнялась без запроса пароля.
Я предполагаю, что вы уже имеете некоторое представление о том, как идентифицировать файл, который хотите скопировать, и что вы можете или уже написали сценарий или набор команд, которые будет работать на удаленном компьютере, который выполняет эту идентификацию.
Кроме того, я также предполагаю, что эти команды выводят на стандартный вывод полный путь к файлу или относительный путь к файлу относительно домашнего каталога пользователя 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"
С уважением