Не наличие полномочий пользователя root препятствует тому, чтобы Вы слушали на портах ниже 1024 в типичных системах Linux.
Таким образом Сквид должен работать хорошо некорневым слушанием на 8 080 пока система, Вы идете, не заблокировал входящий трафик на том порте через брандмауэр или iptables
.
Не уверенный, сколько Сквид дескрипторов файлов обычно использует, но если Ваш администратор установил предел для этого, которое могло быть проблемой, а также другими вещами. Если Вы используете функцию фильтрации Сквида (такую как adzapper сценарий, например) - осведомленная икра Сквида процесс для каждого входящего Запроса HTTP и если Ваша учетная запись имеет предел процесса, можно поразить его. (Это могло бы сделать вещь Apache перед ветвлением также, это было некоторое время, так как я играл с squid
.)
К порту вперед таким образом Вы описываете, Вам нужен некоторый тип средства передачи, проходческого щита или прокси, работающего на первой машине, передающей второй машине. Таким образом, Вы были бы "SSH туннелировать" в неограниченную машину, и Вам нужна программа, работающая на неограниченной машине, которая принимает трафик в порте и затем "reforwards" это к другому хосту. Ваш туннель затем имеет 2 транзитных участка. Возможно rinetd
мог сделать это для Вас легко.
Ваш лучший выбор будет для записи сценария вместо того, чтобы пытаться передать большую ужасную команду через ssh
аргументы. Становится очень трудным выполнить сложные команды через ssh аргументы, потому что ssh присоединяется ко всем аргументам в разделенную пробелами строку и затем повторно разделяет их на удаленном конце.
Теперь, использование сценария не так плохо, как это звучит и на самом деле довольно просто, так как можно передать сценарий по STDIN.
function host_file_count() {
ssh -o StrictHostKeyChecking=no david@"$1" bash -s <<'EOI'
dir_last="$(ls -dt1 /bat/data/snapshot/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | head -n 1)"
count="$(ls -1 "$dir_last"/ | wc -l)"
echo "$(hostname): $dir_last=$count"
EOI
}
host_file_count machineB
host_file_count machineC
В основном это просто подает сценарий в STDIN ssh
который в свою очередь передает STDIN bash -s
на удаленном хосте.
Другое преимущество выполнения его, которым этот путь состоит в том, что Вы не должны выполнять несколько ssh
команды для получения результата.
Обратите внимание, что многие скажут Вам не анализировать ls
. Таким образом ниже другой сценарий, который делает то же, но без использования ls
.
function host_file_count() {
ssh -o StrictHostKeyChecking=no david@"$1" bash -s <<'EOI'
dirs=( /bat/data/snapshot/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ) # get a list of matching directories
dir_last="${dirs[${#dirs[@]} - 1]}" # get the last item in the list
files=( "$dir_last"/* ) # get the list of files in directory
count="${#files[@]}" # size of that list
echo "$(hostname): $dir_last=$count"
EOI
}
host_file_count machineB
host_file_count machineC
примечание: оба из них полностью не тестируются, могут быть незначительные ошибки, но принцип стоит
Ваша локальная оболочка в интерпретации канала, плюс у Вас есть переменная на неправильной команде:
len1=$( ssh ... user@host sh -c "ls '$dir1' | wc -l" )
sh -c
подразумевается. ssh
на удаленном хосте в основном передает все аргументы через a sh -c
, так определение его является ненужным. С ним, как, Вы входите в большое количество проблем с ssh и wordsplitting (это - сложная ужасная путаница).
– Patrick
24.12.2013, 10:05
host_file_count machineB
host_file_count machineC
. – Patrick 24.12.2013, 10:08