Adicione chave pública às chaves autorizadas do servidor remoto e execute alguns comandos

4

Este comando em seus próprios trabalhos:

ssh user@remote 'cat >>/home/user/somedir/.ssh/authorized_keys' <~/.ssh/id_rsa.pub

Então, tentei incorporá-lo ao meu script:

#! /bin/bash

ssh user@remote 'cat >>/home/user/somedir/.ssh/authorized_keys' <~/.ssh/id_rsa.pub << EOF
    touch hello
    mkdir /test/morning
    cp hello /test/morning
EOF 

O objetivo é copiar meu id_rsa.pub da minha máquina local para o arquivo authorized_keys do host remoto e depois executar alguns outros comandos, mas os comandos usando o script acima são ecoados no arquivo authorized_keys , assim :

$ cat /home/user/somedir/.ssh/authorized_keys 
    touch hello
    mkdir /test/morning
    cp hello /test/morning
EOF 

Alguém pode ajudar?

    
por Proletariat 10.08.2016 / 11:36

2 respostas

4

Eu acho que você está procurando,

cat ~/.ssh/id_rsa.pub | ssh user@remote "mkdir /home/user/somedir/.ssh; \
cat >> /home/user/somedir/.ssh/authorized_keys; touch hello; mkdir /test/morning; \
cp hello /test/morning"

Eu prefiro usar ssh-copy-id . Você apenas fornece o endereço remoto e adiciona sua chave pública ao arquivo authorized_keys na máquina remota:

$ ssh-copy-id user@remote
    
por 10.08.2016 / 11:49
2

O documento aqui redireciona a entrada padrão do comando executado ( ssh neste caso). O mesmo acontece com o redirecionamento < file . Os redirecionamentos são processados da esquerda para a direita, portanto, o último redirecionamento entra em vigor. Então, cat roda no controle remoto e obtém a entrada do documento aqui.

Experimente com algo como

echo file > sourcefile
cat <<EOF <sourcefile 
here doc
EOF

e compare com os redirecionamentos na ordem inversa.

    
por 10.08.2016 / 12:05