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

выполнить bash на локальной машине, чтобы работать удаленно?

Думаю написать автоматизированный скрипт, который подключается к серверу (ssh), копирует с него файлы. выполнить скрипт на сервере и отключиться.

  1. Возможно ли, чтобы сценарий выполнял код (например, код для выполнения удаленного сценария) с локального компьютера? Я никогда не пробовал и не знаю, как это сделать.

  2. Я понимаю, как использовать scp по большей части, поэтому копирование не проблема

  3. После выполнения 1 я хотел бы знать, как дождаться завершения удаленного скрипта и, возможно, время от времени выполнять скрипт, но отключиться и оставить скрипт запущенным на сервере. Как я могу это сделать? (это должно быть в отдельном вопросе)

A1) Чтобы выполнить команду на удаленном сервере:

ssh server "/usr/local/sbin/command"

Используя этот метод, сеанс ssh будет ждать завершения процессов переднего плана.

A3) Чтобы выполнить фоновый процесс на удаленном сервере, запустите:

ssh server "nohup /usr/local/sbin/command &"

То, что вы описываете, звучит довольно просто (и, как говорили другие, легко реализовать). В голове что-то вроде:

# with a file named after each node:
SERVERS=`ls /etc/cluster/members`
THIS_NODE=`uname -n`

REMOTE_NAME="/var/cluster/incoming/${THIS_NODE}_$$"

for (i in ${SERVERS}); do
    scp $1 ${i}:${REMOTE_NAME}
    ssh ${i} "bash ${REMOTE_NAME}"
done

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

Возможно, вы захотите взглянуть на nrpe с Nagios для вещей, которые запускаются регулярно, или Canonical Пейзаж для запуска специального материала на большом количестве серверов (одна из основных функций этого приложения - установка исправлений, но его можно использовать для всех видов вещей - и во всех типах ОС).

HTH

С.

В вашем случае может быть полезно изменить свой алгоритм:

... подключается к серверу (ssh), копирует с него файлы. выполнить скрипт на сервере и отключиться.

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

Чтобы иметь здесь цель, неплохо было бы создать отдельного пользователя для копирования:

#useradd -p xxxx -d /home/username username

затем внесите некоторые изменения в этого пользователя .bash_logout файл:

if [ "$SHLVL" = 1 ]; then
  nohup /usr/local/bin/command &
fi

После этого сгенерируйте ключи ssh для новичков и настройте параметры удаленного входа так, как вам удобнее.

Теперь каждый раз при копировании, например scp user@host:/directory/SourceFile TargetFile выполнено, фоновая задача /usr/local/bin/command должен быть запущен в удаленном ящике.

  1. не при «нормальной» настройке, но возможно, если вы используете сетку или кластерный движок. Просто скопируйте скрипт и выполните его

  2. чтобы оставить скрипт запущенным просто daemonize (запустить в фоновом режиме с stdin и перенаправить его на / dev / null), т.е.

    ssh remotehost "команда> / dev / null 2> & 1 </ dev / null &"

если вы хотите подождать, но делать другие вещи, используйте wait, как с локальными процессами

ssh firsthost command &
ssh secondhost othercommand &
...

wait