ssh remotehost 'command1 ; command ; command3'
Или, если вы хотите запустить команду 2, только если команда 1 выполнена успешно, и команду 3, если команда 2 выполнена успешно:
ssh remotehost 'command1 && command && command3'
Обратите внимание, что вам нужно обратить особое внимание на вопросы цитирования оболочки, они могут стать очень сложными, когда вы печатаете команда в вашей локальной оболочке для выполнения команд в удаленной оболочке (они могут стать достаточно плохими даже при простой работе с локальной оболочкой). Например, рассмотрим разницу между следующими двумя командами:
ssh remotehost 'ps hu -Csshd | awk "{print \$2}"'
ssh remotehost 'ps hu -Csshd | awk "{print $2}"'
Первая печатает только PID процессов sshd. Второй выводит полный список процессов sshd ps hu
- неэкранированный $ 2 - это пустая строка, поэтому команда awk становится просто {print}
. Третий вариант - запустить ps на удаленный хост и awk локально:
ssh remotehost ps hu -Csshd | awk '{print $2}'
В двух приведенных выше командах вся строка в кавычках выполняется на удаленном хосте, потому что это аргумент, который вы дали команде ssh. В этом примере все до | выполняется удаленно (опять же, потому что 'ps', 'hu' и '-Csshd' являются аргументами для команды ssh, а оставшаяся часть строки выполняется локально.
Для задач, которые сложнее, чем вы хотите запустить с однострочником (или когда цитирование оболочки становится адским), вы можете написать сценарий оболочки и скопировать его на удаленный хост, а затем выполнить его с помощью ssh:
vi myscript.sh
chmod +x myscript.sh
scp myscript.sh remotehost:/usr/local/bin/
ssh remotehost myscript.sh
Вы можете скопировать сценарий куда угодно, но а) вам нужен доступ для записи в каталог, б) он не может быть в файловой системе, смонтированной с помощью noexec (не часто, но иногда / tmp монтируется с noexec), если вы не запустите его с помощью «/ путь / к / интерпретатор / путь / к / script "- например, / bin / bash / tmp / myscript.sh
3389 явно не находится в пределах 10000 :20000, поэтому необходимо дополнительное утверждение:
iptables -t filter -A FORWARD -p udp -d 10.8.0.19 --dport 3389 -j ACCEPT
сделать СВЯЗАННЫЙ трафик ПРИНЯТЫМ в цепочке FORWARD.
iptables -A FORWARD -m state --state RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
Второе правило в этом случае не обязательно, но может помочь другим трафикам.