SSH использует шифрование, которое делает подслушивание бессмысленным. Весь соглядатай видел бы, шифрованный текст, т.е. случайные данные.
Можно удостовериться, что никто не прерывает данные путем обеспечения, что цифровой отпечаток сервера SSH, о котором сообщает клиент SSH, - то, что Вы ожидаете.
SSH не скрывает IP, который Вы подключаете с или отрезок времени, Вы соединены. Это не передает информацию отдельно - когда соединение неактивно, так SSH (незначительное исключение является некоторыми клиентами [а именно, PuTTY] имеют опцию "проверки активности", посредством чего пакеты отправляются только, чтобы помешать соединению испытывать таймаут). Эта информация может использоваться взломщиком для корреляции действия с определенными файлами или операций. Существуют способы запутать это, если Вы очень параноики.
Существуют различные версии SSH - Вы хотите использовать версию 2 и никогда любые более ранние версии.
SSH является протоколом сетевого приложения - он создает "канал" между Вами и удаленной системой. Таким образом, это просто касается поставки данных, сервер хочет отобразить Вам и передаче, что Вы вводите назад к серверу. Учетные записи, управление доступом и вход в систему остаются ответственностью операционной системы. SSH ничего не изменяет относительно этого.
Это означает, что "уровни доступа" являются отдельно Вашей ответственностью в качестве системного администратора - сделанный отчет будет иметь те же возможности, входят ли они в систему локально или через SSH.
sshd_config
имеет опцию отклонить root
способность непосредственно войти в систему (не влияет sudo
или su
). Обычно это считают хорошей вещью, поскольку удаленный корневой доступ затем потребовал бы двух паролей вместо одного.
Для краткости, IFS=$'\n'
присваивает переменной IFS
новую строку \n
.
$'string'
конструкция является механизмом кавычки, который используется для декодирования ANSI C подобно экранирующим последовательностям. Этот синтаксис взят из ksh93
, и был переносимым в современную оболочку, как bash
, zsh
, pdksh
, busybox sh
.
Этот синтаксис не определяется POSIX, но был принят для SUS выпуска 7.
IFS
означает "внутренний сепаратор поля". Он используется оболочкой для определения того, как делать разделение слов, т.е. как распознавать границы слов.
Попробуйте это в оболочке типа bash (другие оболочки могут работать с этим по-другому, например zsh):
mystring="foo:bar baz rab"
for word in $mystring; do
echo "Word: $word"
done
Значение по умолчанию для IFS
состоит из пробельных символов (если быть точным: пробел, табуляция и новая строка). Каждый символ может быть границей слова. Таким образом, при значении по умолчанию IFS
, вышеприведенный цикл выдаст:
Word: foo:bar
Word: baz
Word: rab
Другими словами, оболочка думает, что пробел - это граница слова.
Теперь попробуйте установить IFS=:
перед выполнением цикла. На этот раз результат будет:
Word: foo
Word: bar baz rab
Теперь оболочка разбивает загадочный
на слова также -- но теперь она рассматривает только двоеточие как границу слова.
Первый символ IFS
специальный: он используется для разделения слов в выводе при использовании специальной переменной $*
(пример взят из Advanced Bash Scripting Guide, где также можно найти более подробную информацию о специальных переменных, подобных этой):
$ bash -c 'set w x y z; IFS=":-;"; echo "$*"'
w:x:y:z
Сравните с:
$ bash -c 'set w x y z; IFS="-:;"; echo "$*"'
w-x-y-z
Обратите внимание, что в обоих примерах оболочка по-прежнему будет обрабатывать все символы :
, -
и ;
как границы слов. Единственное, что меняется, это поведение $*
.
Другая важная вещь, которую необходимо знать, это то, как так называемые "IFS белые пробелы" обрабатываются . В основном, как только IFS
включает пробельные символы, ведущий и ведущий пробельные символы отделяются от строки, которая должна быть разделена перед ее обработкой, а последовательность пробельных символов также разделяет поля. Однако это относится только к тем пробельным символам, которые реально присутствуют в IFS
.
Например, посмотрим на строку "a:b::: c "
(трейлинговый пробел и два пробельных символа между c
и d
).
IFS=:
оно будет разбито на четыре поля: "a"
, "b"
, "
(пустая строка) и " c "
(опять же, два пробела между c
и d
). Обратите внимание на пробелы переднего и заднего плана в последнем поле. IFS=' :'
оно будет разбито на пять полей: "a"
, "b"
, "
(пустая строка), "c"
и "d"
. Никаких лидирующих и скользящих пробельных символов нигде. Обратите внимание на то, как многочисленные, последовательные символы пробела разделяют два поля во втором примере, в то время как многочисленные, последовательные двоеточия не разделяют (так как они не являются символами пробела).
Что касается IFS=$'\n'
, то это синтаксис ksh93
, который также поддерживается bash
, zsh
, mksh
и FreeBSD sh
(с вариациями между всеми оболочками). Цитируя bash manpage:
слова формы $'string' обрабатываются специально. Слово расширяется до "string", с заменой символов в обратной кодировке на символы, указанные в стандарте ANSI C.
\n
является экранирующей последовательностью для новой строки, поэтому IFS
заканчивается установкой одного символа новой строки.
Внутри отдельные цитаты в долларах, некоторые персонажи оцениваются специально. Например, \ N
переводится на новую строку.
Итак, эта конкретная линия присваивает новую строку переменной IFS. Если, в свою очередь, является специальной переменной в Bash: внутренний полевой сепаратор. Как говорит Man Bash
используется для разделения слов после расширения и разделить линии в словах
, чтение
встроенной командой. Значение по умолчанию.
Я предпочла, чтобы объяснить $ IFS
через пример:
Suppeoo, который вы хотите CP или MV или другой файл, откупающий файл, если он пуст, когда ваши файлы имеют место Meta Char или Space, например:
Администрирование Linux.pdf
или Бесплатное программное обеспечение .ogg
, Конечно, у вас будет пробелм, потому что:
Linux рассмотрит расчетное параметра и администрирование, рассмотрите расчетное значение Seperate Param.so встроенной переменной
, затем вы можете инициализировать на IFS == $ (echo -en "\ n \ b")
, затем Bash отбрасывает любую мета чар и пространство между именем файла, например:
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
mymusicdir=~/test/dd
find $mymusicdir -name "*" -execdir rename 's/ /_/g' "{}" +
IFS=$SAVEIFS