La utilidad date
en macOS (que supongo que está utilizando a juzgar por la ubicación de los directorios de inicio del usuario )no es GNU date
y, por lo tanto, no es compatible con todas sus funciones.
Esto significa que su variable OLD_BACKUP
estará vacía (y debería ver un mensaje de error cuando se ejecuta date
), lo que a su vez significa que es el directorio ${BACKUP_DEST[$i]}
el que se elimina.
En su lugar, puede usar date -v -3d +'%d-%m-%Y'
.
#!/bin/bash
set -e
backup_dest=(
'/Users/christopherdavies/Desktop/rsync/test1.co.uk'
'/Users/christopherdavies/Desktop/rsync/test2.co.uk'
)
when=$( date -v -3d +'%d-%m-%Y' )
for backup in "${backup_dest[@]}"; do
[ -d "$backup/$when" ] && rm -Rf "$backup/$when"
done
Alternativamente, instale GNU coreutils y use GNU date
.
Otros cambios realizados en su código:
Eliminado exit 0
del final y agregado set -e
. Si el script falla, querrá poder notarlo.
No se usó la matriz del sitio web.
Recorra los elementos de la matriz en lugar de usar índices, es más fácil de leer.
Si desea una declaración simple if
de una sola línea, puede usar la sintaxis de cortocircuito en su lugar (, que es más corta ).
Use minúsculas -nombres de variables de mayúsculas y minúsculas.
Citar siempre expansiones variables.
Es un script bash
, por lo que debe hacer referencia a bash
en la línea #!
-.
Да, это возможно. Например, злоумышленник может управлять портом прослушивания 8080 на удаленном хосте и возвращать данные любой программе, которая подключается с внутренних хостов, что приводит к сбою этой программы, что может быть использовано. Это относится к любому сетевому соединению.
Обратите внимание, что сетевое подключение существует только тогда, когда внутренний хост подключается к порту прослушивания, предоставленному клиентом SSH. На удаленном хосте нет постоянно открытого порта, ведущего к внутреннему хосту. Кроме того, сервер SSH на хосте-бастионе не виден удаленному хосту.
Нет, назад сокета нет. Злоумышленник должен был бы «подцепить» TCP-сессию, открытую от имени внутреннего хоста, и (за исключением эксплойтов ), такая поездка была бы ограничена областью сеанса TCP; он не мог связаться с другими портами на внутреннем хосте или хосте-бастионе.
Вы можете сделать ваше соединение менее зависимым от изменений локальной конфигурации, указав его локальный адрес привязки явным образом:
ssh -f -N -L localhost:8080:<remote_ip>:8080 user@<bastion_host>
Это гарантирует, что порт, прослушиваемый на внутреннем хосте, привязан к локальному хосту и, следовательно, доступен только для программ, работающих на самом внутреннем хосте. (Он будет доступен всем пользователям этого хоста.)