Не может быть сервиса, работающего прямо сейчас, но как насчет завтра? Вы их все выключили, но что относительно Ваших пользователей? Любой в системе Unix/окон/Mac может открыть порт> 1024 на любой машине, к которой у них есть доступ. Что относительно вредоносного программного обеспечения? Что относительно вируса? Они могут также открыть порты и начать служить информации миру или начать прислушиваться к соединениям из сети.
Основная цель брандмауэра не состоит в том, чтобы заблокировать порты для сервисов, которые Вы знаете, отключены, она должна заблокировать порты на сервисах, о которых Вы не могли бы знать. Думайте это как значение по умолчанию отклоняет только с определенными дырами, перфорированными в для сервисов, которые Вы авторизовываете. Любой пользователь или программа, запущенная пользователем, могут запустить сервер в системе, к которой у них есть доступ, брандмауэр препятствует тому, чтобы кто-то еще соединился с тем сервисом.
Хороший администратор знает, какие сервисы должны быть подвергнуты и могут включить им. Брандмауэр должен главным образом снизить риск с неизвестных серверов, работающих на Вашей системе или Вашей сети, а также управлять тем, что позволяется в сеть от центрального места.
Важно знать то, что работает на Вашей машине/сервере, и только включите то, в чем Вы нуждаетесь, но брандмауэр обеспечивает, что дополнительный бит защиты от вещей Вы не знаете о.
Если оболочка удаленного пользователя является 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
.
Можно использовать Здесь Документ:
cat <<EOF | ssh $USER@$IP 2>>$LOG
grep x *
grep -i y *.log
EOF