Posso criar, definir permissões e gravar em um arquivo com um único comando Unix?

2

Eu quero acelerar a criação de contas de usuário em algumas VMs Linux que estou criando e imagino se poderia simplificar o processo de gravação no arquivo ~/.ssh/authorized_keys or ~/.ssh/authorized_keys2 do novo usuário.

Meu processo manual é aproximadamente (logado como novo usuário):

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
touch ~/.ssh/authorized_keys
chmod go-rwx ~/.ssh/authorized_keys
echo '... me@machine' >> ~/.ssh/authorized_keys

Existe alguma maneira, com um comando Bash, um comando GNU padrão ou qualquer programa facilmente instalado no Ubuntu, para condensar touch , chmod e echo em um único comando?

Parte do motivo pelo qual eu gostaria de reduzi-lo a um comando é para que eu possa criar um script de shell que possa ser executado como o usuário inicial com capacidade de sudo na VM.

Algo como:

sudo su - me -c 'ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa'
echo '... me@machine' | sudo su - me -c 'xyz 0600 ~/.ssh/authorized_keys'

Onde xyz é o comando hipotético que cria, define permissões e grava o arquivo de uma só vez.

    
por amacleod 20.01.2015 / 16:31

3 respostas

7

Note que

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

não oferece benefícios sobre:

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

As permissões são verificadas ao abrir um arquivo, e não ao ler ou gravar nele.

Portanto, não importa se você faz o chmod antes ou depois de adicionar o conteúdo. Alguém ainda pode abrir o arquivo antes de você fazer o chmod , mas espere que você adicione conteúdo antes de lê-lo.

Aqui, você quer garantir que o arquivo tenha as permissões certas desde o início:

sudo -u user sh -c '
  umask 077 && printf "%s\n" "$1" >> ~/.ssh/authorized_keys
' sh "$key user@host"
    
por 20.01.2015 / 16:57
0
por 20.01.2015 / 21:34
0

Para o seu exemplo específico, isso é o melhor que eu pude fazer.

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

Uma opção importante foi o sinal -y para ssh-keygen , que permite que a chave pública seja impressa em stdout, o que evita duas etapas de criação e leitura de um arquivo.

Para criar, definir permissões e escrever a partir de um arquivo existente, você pode usar o comando install

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

A desvantagem do comando install é que ele não funciona com o redirecionamento do stdout, o que significa que você precisa copiar o conteúdo de um arquivo inteiro.

    
por 09.12.2016 / 03:08

Tags