Existem dois conjuntos de permissões a considerar em seu cenário - o da máquina local e o da máquina remota. O usuário ec2 não tem permissões para acessar a pasta / root na máquina local. Usando sudo
resolve isso. No entanto, você faz login na máquina remota como um usuário não raiz e não há permissões para gravar na pasta / root. Essa é a causa do erro que você está vendo. (Você provavelmente poderia confirmar isso adicionando o sinalizador -v ao seu comando scp).
Existem pelo menos duas maneiras de resolver isso:
-
O caminho mais fácil:
SCP seu arquivo para um diretório na permissão remota para a qual você tem permissões de escrita (o diretório home (~ /) deve ser bom, se não o diretório / tmp quase certamente funcionará, mas é menos seguro), e, em seguida, o SSH e mova o arquivo.
sudo scp -i /root/path/to/keypair.pem /root/path/to/local_file [email protected]:~/path/to/remote_file ssh -i /root/path/to/keypair.pem [email protected] sudo mv ~/path/to/remote_file /root/path/to/remote_file exit
-
A maneira mais difícil
É possível transferir um arquivo via SSH e executar o sudo na máquina remota usando essa conexão SSH, mas a máquina remota precisa permitir isso. Por padrão, no Linux da Amazon (que parece que você está executando a partir do seu nome de usuário), você não pode executar o sudo sem um tty. Para alterar isso, na máquina remota, execute
visudo
e comenteDefaults requiretty
(linha 56) e salve o arquivo. Depois disso, você pode:Canalize sua chave através do SSH (observe que você ainda precisa do sudo para ler o arquivo local):
sudo cat /root/path/to/local_file | ssh -v -i /root/path/to/keypair.pem [email protected] "sudo bash -c 'cat - > /root/path/to/remote_file'"
Ou, redirecione sua chave através do SSH (o sudo só se aplica à primeira parte do comando, então você precisa se tornar root, ou colocar o comando inteiro em um script e usar o sudo):
sudo -i ssh -i /root/path/to/keypair.pem [email protected] sudo sh -c '"cat > /root/path/to/remote_file"' < /root/path/to/local_file exit
(Alguns programas parecem ser capazes de 'sudo após o login através do scp' (por exemplo, WinSCP), no entanto eu não sei de qualquer maneira de executar um comando sobre scp - talvez o SSH é usado para transferir o arquivo naqueles cenários)
Por outro lado, é permitir logins root na máquina remota e, em seguida, efetuar o login diretamente como root sobre SCP (ainda usando sudo localmente). Desfaça as alterações que você fizer com o visudo depois de terminar com elas.