Удостоверьтесь, что Вы сохраняете свой сервер SSH актуальным. OpenSSH имеет хорошую запись безопасности, но Вы не хотите.
Рассмотрите тщательно, необходимо ли позволить аутентификацию по паролю. Обычно необходимо входить в систему только от доверяемых компьютеров (не вводите пароль на компьютере, который может запускать клавиатурный перехватчик), и эти доверяемые компьютеры обычно находятся под контролем и имеют ssh закрытый ключ. Таким образом в большей части аутентификации по паролю обстоятельств не полезно, и необходимо отключить ее. Главная причина запретить аутентификацию по паролю состоит в том, что пользователи бедны в руководящих паролях: они снова используют их (таким образом, пароли пропущены), и они плохи при выборе трудных к предположению паролей (таким образом, пароли вынуждены скотами). Если Вы - единственный пользователь на машине, и Ваш пароль силен, и Вы не используете тот пароль больше нигде, и Вы не имеете и никогда не будете иметь никакого вида тестовой учетной записи с легким к предположению паролем, и Вы никогда не будете открывать счет на друга, то нормально позволять аутентификацию по паролю.
Можно хотеть ограничить группу пользователей, которым разрешают войти в систему по ssh. В частности, отключение корневых логинов может сделать нападения медленнее, если Вы противостоите взломщику низкой и средней изощренности. Это не то, что большое соглашение хотя; возрастание от учетной записи пользователя для укоренения редко является самой твердой частью.
Если Вы можете, сохранить вход в систему отдельной машиной или на медиа только для чтения. Обратите внимание, что существует много ботов, которые выполняют попытки "в лоб" войти в систему с предполагаемыми паролями или слабыми ключами. Эти боты безобидны против правильно защищенной установки (сильные пароли, никакой ключ низкой энтропии), но могут генерировать записи в журнале. Способ в основном избавиться от этих попыток "в лоб" состоит в том, чтобы выполнить ssh на порте не по умолчанию. Обратите внимание, что это - только способ подавить объем журналов (и возможно немного уменьшать трафик от зондирования), это не обеспечивает дополнительной безопасности по сути.
См. также этот подобный вопрос на Exchange Стопки безопасности.
Лучший способ сравнить текстовые файлы с diff
команда:
diff output1.txt output1.txt
Для массового сравнения можно звонить diff
в цикле:
for x in input*.txt; do
slow-program <"$x" >"$x.out-slow"
fast-program <"$x" >"$x.out-fast"
diff "$x.out-slow" "$x.out-fast"
done
Если отрывок выше продуктов вывод, Ваша быстрая программа является багги. В bash/ksh/zsh Вы не должны хранить промежуточные файлы на диске. Однако это - не обязательно хорошая вещь, так как, вероятно, будет полезно осмотреть вывод отличия на Вашем досуге.
for x in input*.txt; do
diff <(slow-program <"$x") <(fast-program <"$x")
done
Может быть более удобно поместить вводы и выводы в отдельные каталоги и выполнить рекурсивное различное.
for x in inputs/*; do slow-program <"$x" >"slow/${x##*/}"; done
for x in inputs/*; do fast-program <"$x" >"fast/${x##*/}"; done
diff -ru slow fast
Моя рекомендация состояла бы в том, чтобы записать make-файл, который запускает тесты и выполняет сравнения (в отдельных целях). (Используйте вкладки, куда я поместил 8 пробелов.)
all_test_inputs = $(wildcard input*.txt) # relies on GNU make
%.out-slow: %.txt slow-program
./slow-program <$< >$@.tmp
mv $@.tmp $@
%.out-fast: %.txt fast-program
./fast-program <$< >$@.tmp
mv $@.tmp $@
%.diff: %.out-slow %.out-fast
-diff $*.out-slow $*.out-fast >$@.tmp
mv $@.tmp $@
# Test that all diff files are empty
test: $(all_test_inputs:%.txt=%.diff)
for x in $^; do ! test -s "$x"; done
.PHONY: test
Выполненный make test
для обработки всех входных файлов (только для входных файлов или программ, которые изменились с прошлого раза) и сравнивают результаты. Команда будет успешна, если и только если все тесты работали правильно, и вывод обеих программ идентичны в каждом случае.
Принятие Вас скомпилировало Ваши программы как prog1
и prog2
, и это они производят свой вывод на stdout
, Вы могли сделать что-то вроде этого:
#! /bin/bash
for input in input*.txt ; do
./prog1 $input > $input.out1
./prog2 $input > $input.out2
if cmp $input.out1 $input.out2 > /dev/null ; then
echo Programs disagreed on $input
else
echo Programs agreed on $input
fi
done
Это сравнивает байт выходных файлов для байта. Вы могли также использовать diff
для сравнения.
Вывод всех выполнений будет в названных файлах inputX.txt.out1
или .out2
, таким образом, можно осмотреть случаи, где они не соответствуют.