Действительно ли возможно сохранить соединение SSH в сценарии удара вместо $ (ssh команда user@ip) каждый раз?

Не может быть сервиса, работающего прямо сейчас, но как насчет завтра? Вы их все выключили, но что относительно Ваших пользователей? Любой в системе Unix/окон/Mac может открыть порт> 1024 на любой машине, к которой у них есть доступ. Что относительно вредоносного программного обеспечения? Что относительно вируса? Они могут также открыть порты и начать служить информации миру или начать прислушиваться к соединениям из сети.

Основная цель брандмауэра не состоит в том, чтобы заблокировать порты для сервисов, которые Вы знаете, отключены, она должна заблокировать порты на сервисах, о которых Вы не могли бы знать. Думайте это как значение по умолчанию отклоняет только с определенными дырами, перфорированными в для сервисов, которые Вы авторизовываете. Любой пользователь или программа, запущенная пользователем, могут запустить сервер в системе, к которой у них есть доступ, брандмауэр препятствует тому, чтобы кто-то еще соединился с тем сервисом.

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

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

4
01.02.2013, 12:19
2 ответа

Если оболочка удаленного пользователя является ksh93, zsh или ударом (или sh реализованный как любой из тех), Вы могли сделать:

eval "$(ssh -nq "$user@$host" '
  printf "%s=%q\n" \
    tmp1 "$(command1)" \
    tmp2 "$(command2)" \
    tmp3 "$(command3)"')"

Однако обратите внимание, что Вы будете отсутствовать на статусе выхода удаленных команд. И это могло потенциально позволить удаленному пользователю заставлять Вас выполнять произвольные команды (например, путем вывода чего-то в их~/.bashrc).

Другая опция состоит в том, чтобы использовать ControlMaster функция ssh совместно использовать соединение между несколькими вызовами ssh. Вы могли также использовать auto режим. Что-то как:

mkdir -p -- ~/.ssh/ctl
tmp1=$(ssh -o ControlMaster=auto \
           -o ControlPath="$HOME/.ssh/ctl/%L-%r@%h:%p" \
           -o ControlPersist=5m -nq "$user@$host" cmd1)

(и то же для tmp2...). Тот синтаксис снова использует существующее соединение, если он существует или создает новый иначе. Это будет завершено после 5 минут того, чтобы быть неактивным, или можно закрыть его явно с:

ssh -o ControlPath="$HOME/.ssh/ctl/%L-%r@%h:%p" -O exit "$user@$host"

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

Конечно, если Вам не нужны три вывода команды для входа в три различных переменные, можно сделать:

tmp=$(ssh -nq "$user@$host" '
   cmd1
   cmd2
   cmd3')

Таким образом, 3 вывода команды будут казаться связанными в $tmp.

5
27.01.2020, 20:54

Можно использовать Здесь Документ:

cat <<EOF | ssh $USER@$IP 2>>$LOG
grep x *
grep -i y *.log
EOF
0
27.01.2020, 20:54

Теги

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