Я могу создать, установить полномочия и записать в файл с единственной командой Unix?

Решение

echo "$latexString\\\\" >> $outputFile
2
20.01.2015, 17:49
3 ответа

Обратите внимание, что

touch ~/.ssh/authorized_keys
chmod go-rwx ~/.ssh/authorized_keys
echo '... me@machine' >> ~/.ssh/authorized_keys

не предлагает пользы по поводу:

echo '... me@machine' >> ~/.ssh/authorized_keys
chmod go-rwx ~/.ssh/authorized_keys

разрешения проверяются на открытии файл, не при чтении или записи к нему.

Так что не имеет значения, делаете ли вы CHMOD до или после добавления контента. Кто-то все еще может открыть файл, прежде чем делать CHMOD , но подождите, пока вы добавите контент, прежде чем прочитать его.

Здесь вы хотите убедиться, что файл имеет правильные разрешения с начала:

sudo -u user sh -c '
  umask 077 && printf "%s\n" "$1" >> ~/.ssh/authorized_keys
' sh "$key user@host"
7
27.01.2020, 21:52

Для вашего конкретного примера это лучшее, что я смог сделать.

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa -y > ~/.ssh/authorized_keys && chmod 0600 ~/.ssh/authorized_keys

Важной опцией был флаг -y для ssh-keygen, который позволяет печатать открытый ключ в stdout, что позволяет избежать двух шагов создания и чтения файла.

Для создания, установки разрешений и записи из существующего файла можно использовать команду install

install -m 0600 ~/.ssh/id_rsa ~/.ssh/authorized_keys

Недостатком команды install является то, что она не работает с перенаправлением из stdout, что означает, что вам придется копировать содержимое всего файла.

0
27.01.2020, 21:52

Теги

Похожие вопросы