Continue os comandos do shell uma vez conectados ao SSH

7

Não tenho certeza se a pergunta que estou fazendo está correta, mas basicamente eu queria automatizar esse processo

  scp ~/.ssh/id_rsa.pub [email protected]:~/
  ssh [email protected]
  mkdir .ssh
  cat id_rsa.pub >> .ssh/authorized_keys
  rm id_rsa.pub
  chmod go-w ~
  chmod 700 ~/.ssh
  chmod 600 ~/.ssh/authorized_keys

Então eu pensei em criar um script de shell e colocá-lo no meu .bash_profile assim: function

setup_ssh () {
  scp ~/.ssh/id_rsa.pub $1:~/
  ssh $1
  #the following is happens when connected to the server using ssh
  mkdir .ssh
  cat id_rsa.pub >> .ssh/authorized_keys
  rm id_rsa.pub
  chmod go-w ~
  chmod 700 ~/.ssh
  chmod 600 ~/.ssh/authorized_keys
}

Mas é claro que isso não funciona porque não continua com os comandos, uma vez conectados ao servidor. Existe alguma maneira de continuar os comandos, uma vez que está conectado ao servidor via ssh?

    
por Marc 21.01.2012 / 23:33

2 respostas

5

Adiciona sua identidade ao servidor remoto, e também cria a árvore ~ / .ssh com as permissões apropriadas, se necessário.

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
    
por 22.01.2012 / 20:57
9

Aqui está uma maneira um pouco diferente que funciona:

setup_ssh() {
  cat ~/.ssh/id_rsa.pub | ssh $1 '
    mkdir .ssh;
    cat >> .ssh/authorized_keys;
    chmod go-w .;
    chmod 700 .ssh;
    chmod 600 .ssh/authorized_keys
  '
}

Você também pode se livrar do cat e ter o shell pipe no seu arquivo id_rsa.pub, mas eu acho que isso é o suficiente para você seguir em frente.

Editar:
A maneira como funciona
Você está basicamente iniciando um novo shell no host remoto para executar os comandos que você passou para ssh (entre aspas). Quando chega à parte cat >> .ssh/authorized_keys , nada leu do STDIN ainda, então os dados do cat ~/.ssh/id_rsa.pub ainda estão lá. cat lê dados de STDIN e, em seguida, redirecionamos isso para o novo arquivo authorized_keys. Então nós executamos os comandos restantes.

    
por 21.01.2012 / 23:41

Tags