scp para copiar o arquivo para o servidor remoto falha devido às permissões

1

Eu acho que meu problema fundamental é que eu não entendo completamente como o ssh / scp funciona. Mas eu não sei o que procurar no Google para ler a minha pergunta.

Descrição do problema

Eu criei um script bash no serverA. Ele tenta scp um arquivo de serverA para serverB. Este script será agendado como um cron job.

Para testar se esse script funcionará, eu tentei scp manualmente o arquivo de serverA para serverB. Mas estou recebendo uma mensagem de erro "Permissão negada" no serverA.

Eu entrei no serverA em primeiro lugar assim:

mycomputer#> ssh [email protected]

Perguntas:

O teste scp manual é uma boa ideia? Porque eu estou logando usando minha chave em serverA mas, no final, é a tarefa cron que vai acionar o comando scp.

Como eu sei em que ID de usuário / chaves a tarefa cron tentará a cópia?

O que eu deveria procurar no Google para entender melhor como tudo isso funciona?

Obrigado.

    
por Happydevdays 16.05.2016 / 19:20

3 respostas

1

Se você quiser automatizar algo assim, precisará configurar chaves públicas / privadas em ambos os lados e, em seguida, configurar o ssh para chaves autorizadas na direção que deseja copiar. Supondo que você esteja usando o OpenSSh, faça o seguinte em ambos os sistemas:
ssh-keygen -t dsa
cd ~ / .ssh
cp id_dsa identidade
cp id_dsa.pub authorized_keys
cp id_dsa.pub systemname_id_dsa.pub

Agora você precisará copiar o último arquivo do sistema de origem para o diretório ~ / .ssh do sistema de destino e, em seguida, executar o seguinte comando:
cat systemname_id_dsa.pub > > authorized_keys

Agora você deve conseguir ssh / scp da origem para o destino sem uma senha para esse usuário. Eu sugiro não fazer isso como root, mas como outro usuário, pois abre possíveis problemas de segurança quando feito como root.

    
por 16.05.2016 / 21:09
1

Para melhor compreensão, recomendo que você examine esses dois componentes do pacote OpenSSH (você pode fazer isso por man ssh-keygen e / ou man ssh-copy-id ):

  • SSH-KEYGEN(1) - geração, gerenciamento e conversão de chaves de autenticação
  • SSH-COPY-ID(1) - use chaves localmente disponíveis para autorizar logins em uma máquina remota

exemplo (como fazer o par de chaves e copiá-lo para o host remoto):

SSH-KEYGEN(1) :

$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/X/.ssh/id_rsa): 
Created directory '/X/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /X/.ssh/id_rsa.
Your public key has been saved in /X/.ssh/id_rsa.pub.
The key fingerprint is:
e0:cd:fd:18:45:66:0d:11:a0:08:75:6a:f3:1a:6c:45 X@Z
The key's randomart image is:
+--[ RSA 2048]----+
|    ... E ..B=   |
|     . = . +  .  |
|      * o   .    |
|     + B . .     |
|      = S o      |
|     . o   +     |
|      .   . .    |
|                 |
|                 |
+-----------------+
$

e

SSH-COPY-ID(1) :

$ ssh-copy-id root@Y
The authenticity of host 'Y (Z.Z.Z.Z)' can't be established.
RSA key fingerprint is 5e:8e:ad:71:77:6a:c4:16:e6:0e:34:f8:92:b2:ce:9f.
Are you sure you want to continue connecting (yes/no)? yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@Y's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@Y'"
and check to make sure that only the key(s) you wanted were added.

$

Você então poderá usar scp para copiar sem o prompt de senha ...

Is the manual scp test even a good idea? Because I'm logging in using my key into serverA but ultimately, it's the cron job that's going to trigger to scp command.

antes de agendar o cron, eu faria o teste manual para saber o que esperar sem esperar pelo horário agendado.

How do I know under what user ID / keys the cron job will attempt the copy?

crond geralmente é executado na raiz, mas para verificar, você pode usar o seguinte:

# ps aux | grep crond | grep -v grep
root      2696  0.0  0.0 126336  1712 ?        Ss   May13   0:01 /usr/sbin/crond -n
# 
    
por 16.05.2016 / 21:34
1

Para copiar do Servidor A para o Servidor B usando scp, você precisa:

1) Escolha um usuário no Servidor B (userB) que deve "receber" os arquivos. Este usuário irá requerer permissões de escrita no diretório para o qual os arquivos serão copiados.

2) Crie um par de chaves pública / privada para esse usuário.

3) Coloque a chave pública em /.ssh/allowedkeys no Servidor B.

4) Escolha um usuário no Servidor A que enviará os arquivos. Este usuário exigirá permissões de leitura nos arquivos a serem enviados.

5) Coloque a chave privada em /.ssh/userB no servidor A

6) Escreva um script para copiar os arquivos desejados. A cópia será algo como scp -i ~ / .ssh / userB somefiles [email protected]: / algumediretorio /

7) Efetue logon no Servidor A como usuárioA e execute crontab -e para editar o crontab do usuárioA e inclua o script no crontab com as configurações desejadas.

Isso deve levá-lo até lá.

    
por 16.05.2016 / 22:16

Tags