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

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

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

В частности, я хочу знать, как из сценария, Я подключался к удаленной машине, выполнял задачи на этой машине. Отключитесь и продолжите выполнение локально.

10
задан 28 August 2017 в 22:07
4 ответа

Решение 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).

15
ответ дан 2 December 2019 в 21:57

Вы можете написать сценарий в следующем формате:

command1
command2
...
ssh user@machine command3
...
command4
command5

Вам нужно настроить SSH-ключи, чтобы command3 выполнялась без запроса пароля.

20
ответ дан 2 December 2019 в 21:57

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

Кроме того, я также предполагаю, что эти команды выводят на стандартный вывод полный путь к файлу или относительный путь к файлу относительно домашнего каталога пользователя 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 на большинстве клавиатур США.

2
ответ дан 2 December 2019 в 21:57

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

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

Я делаю следующее:

командная строка запускает запланированную задачу, которая в моем случае выполняет пакетный сценарий.

schtasks /run /s remoteserver /u %user% /p %password% /tn "scheduledtaskname"

С уважением

0
ответ дан 2 December 2019 в 21:57

Теги

Похожие вопросы