Если Вы хотите войти в систему как Testuser
, затем да, необходимо удостовериться это ~Testuser
, ~Testuser/.ssh
и ~Testuser/.ssh/authorized_keys
принадлежите пользователю Testuser
, и что все три не перезаписываемы никаким другим пользователем, т.е.
chown Testuser ~Testuser ~Testuser/.ssh ~Testuser/.ssh/authorized_keys
chmod go-w ~Testuser ~Testuser/.ssh ~Testuser/.ssh/authorized_keys
Обратите внимание, что предпочтенный способ загрузить новый ключ к учетной записи состоит в том, чтобы использовать ssh-copy-id
. Это устроило бы полномочия быть корректным.
Вы можете также иметь ~Testuser/.ssh
и ~Testuser.ssh/authorized_keys
принадлежавший корню, но это только для необычных установок, где Вы не хотите, чтобы пользователь смог изменить список авторизованных ключей. Файл должен быть читаемым Testuser
в любом случае.
Первая вещь: не пишите в файл, из которого Вы читаете, Вы, вероятно, закончите тем, что стерли его. Используйте функцию оперативного редактирования (-i
) вместо этого.
Затем, в твердых кавычках ('
), подстановка переменных не работает, таким образом, необходимо будет сделать что-то еще для получения расширенного $PATH
замененный там.
Наконец, $PATH
очень вероятно, будет содержать /
символы, которые повредили бы синтаксис замены для sed
, таким образом, необходимо будет использовать другой разделитель.
Принятие Ваших путей никогда не содержит ;
s, попробуйте (после того, как поддержали Ваш текущий файл, конечно):
sed -i 's;^PATH=.*;PATH='"$PATH"';' .bashrc
Часть соответствия средств замены: соответствуйте строке, которая запускается с (^
) строка PATH=
и сопровождаемый любым символом (.
) любое количество раз (*
). Т.е. это будет соответствовать строкам, которые запускаются с PATH=
полностью, но не строки, которые имеют PATH=
где-нибудь в середине. .*
важно, потому что Вы хотите заменить целую строку (попытка без него для наблюдения, что происходит).
Заключение в кавычки для получения $PATH
замененный в замене необходимо для составления случаев где $PATH
содержал бы пробельные символы.
$ foo=bar
$ echo hello | sed -e 's/hello/$foo/'
$foo
Огибающим Варом не заменяют в твердых кавычках. Таким образом, Вы получаете литерал $foo
там. Теперь позвольте оболочке развернуть его путем обеспечения его из твердых кавычек:
$ foo=bar
$ echo hello | sed -e 's/hello/'$foo'/'
bar
Хорошо! Но это не безопасно:
$ foo="bar baz"
$ echo hello | sed -e 's/hello/'$foo'/'
sed: -e expression #1, char 11: unterminated `s' command
sed
полученный два аргумента после -e
выше: s/hello/bar
и baz/
, отдельно.Не очень. Для фиксации этого Вам нужно немного больше кавычек:
$ foo="bar baz"
$ echo hello | sed -e 's/hello/'"$foo"'/'
bar baz
Вставление переменной среды "
кавычки - что-то, что необходимо в значительной степени всегда делать при передаче его как аргумента чему-то еще, иначе (принятие $IFS
не был изменен), это будет разделено на пробеле.