Это - проблема полномочий, как определено этой строкой:
Полномочия 0644 для 'id_server_key' слишком открыты.
Это происходит, потому что Ваши полномочия слишком открыты на закрытом ключе, затем ssh не может гарантировать подлинность ключа и передумает относительно использования его.
Так принимая во внимание VFATness карты флэш-памяти (который не поддерживает изменение полномочий), Вы могли сделать что-то как добавление этой строки в /etc/fstab
файл:
LABEL=USB none msdos -u=USERID,-m=PERMS
Где ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ является Вашим числовым идентификатором пользователя, и ПЕРМСКИЕ 700. Это должно сказать утилите автоматического монтирования всегда монтировать Карту памяти как того пользователя без прав для группы или другого.
В случае, если Ваша файловая система поддерживала бы полномочия, будет намного легче зафиксировать его:
chmod 700 /run/media/myself/USB/.ssh
chmod 400 /run/media/myself/USB/.ssh/id_server_key
Вот ужасная часть awk, который выделывает фокусы с разделителем записей
awk -v RS='\\[1em\\]\n|\\\\hline' '
!/[^[:space:]]/ {next}
/^Constant/ {c=$0; next}
{printf "[1em]\n%s", $0}
END {printf "[1em]\n%s\\hline\n", c}
'
Так как текст запускается и заканчивается "разделителем записей", существуют некоторые побочные записи пустого выхода, следовательно первое правило
Вот один из способов сделать это с помощью sed
с использованием буфера удержания:
sed '/\[1em\]/{N;/Constant/{N;x;/^$/d;x};/Semester/{x;/^$/!{H;x};//g}}' file
В каждой строке соответствует [1em]
it читает в строке N
ext, а затем
Константа
, она читает в другой строке N
, e x
] изменяет буферы, и если пространство шаблонов представляет собой просто пустую строку (это означает, что буфер хранения был пуст перед обменом), то выбирается d
. Если пространство шаблонов не является пустой строкой (что означает, что в пространстве удержания было что-то из-за 2 ), e x
снова изменяет буферы, возвращая линии в пространстве образца. Semester
it e x
изменяет буферы, тогда, если пространство шаблонов не пусто, это означает строки [1em] \ nConstant. *
были в буфере удержания, поэтому он добавляет их к строкам [1em] \ nSemester. *
(которые сейчас находятся в буфере удержания), а затем e x
изменяет буферы очередной раз.Если пространство шаблонов пусто, это означает, что строки [1em] \ nConstant. *
находятся после строки Semester
, поэтому он просто копирует пространство удержания поверх пространства шаблонов. Таким образом восстанавливаются строки [1em] \ nSemester. *
, но теперь в буфере удержания есть что-то , когда он достигает 1 . Таким образом, строки [1em] \ nConstant. *
перемещаются, только если они находятся до [1em] \ nSemester. *
, иначе ничего не произойдет.
sed '/\[1em\]/{ # if line matches [1em]
N # read in the next line
/Constant/{ # if pattern space matches Constant
N # read in another line
x # exchange buffers
/^$/d # if pattern space is now empty, delete it
x # otherwise, exchange again
}
/Semester/{ # if pattern space matches Semester
x # exchange buffers
/^$/!{ # if pattern space is not empty
H # append it to hold space
x # then exchange buffers
}
//g # if pattern space is currently empty
} # copy the hold space over the pattern space
}' infile # so now the hold space is no longer empty
Это проще с изданием
. Просто выберите диапазон строк и переместите его после соответствия строки Семестр
:
ed -s infile <<<$'/Constant/-1,/Constant/+1m/Semester/\n,p\nq'
замените , p
на w
, чтобы записать изменения в файл:
ed -s infile <<IN
/Constant/-1,/Constant/+1m/Semester/
w
q
IN