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

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

Проблема в следующем: я хочу скопировать файлы с удаленного компьютера.

Я ищу способ написать сценарий оболочки, который будет подключаться к удаленному компьютеру, получить местоположение сохраненного файла, как только я отключу местоположение от удаленного сервера и использую 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"

С уважением