alterna para o usuário sudo com o comando AND não funciona

0

Estou tentando copiar a chave privada ssh de um usuário para outro usuário em uma única foto.

sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/

Este comando funciona bem, quando eu os executo um por um. Mas, mostra erro como,

cp: cannot create regular file ‘/home/sg-user/keys/master.pem’: Permission denied

Quando eu corri o comando acima, ele muda para o prompt root como,

root@sk-box:/home/sk# 

Eu tentei

sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/ && exit

para ver, se o comando sair do terminal raiz depois de concluir a tarefa. Mas o comando exit não tem nenhum efeito e o prompt não sai da sessão raiz ....

Nota: sudo su foi configurado para não solicitar senha usando /etc/sudoers file

    
por Madhavan Kumar 14.06.2015 / 09:49

3 respostas

1

Você deve tentar

sudo cp /home/sk/keys/master.pem /home/sg-user/keys/
    
por 14.06.2015 / 09:55
2

Quando os comandos são executados, eles são divididos em um processo filho, portanto, quando o comando 'su' é executado, ele é executado em um processo separado no comando cp e não na verdade dentro do terminal raiz.

O comando funcionará se você rodar o cp com sudo, mas ele não rodar dentro do terminal-raiz, você terá que executar os comandos separadamente dentro do su para conseguir isso.

sudo su && sudo cp /home/sk/keys/master.pem /home/sg-user/keys/

O 'sudo so & &' No entanto, é redundante se você estiver apenas tentando realizar a cópia. Isso deve ser tudo o que é necessário:

sudo cp /home/sk/keys/master.pem /home/sg-user/keys/
    
por 14.06.2015 / 10:18
1
sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/

Isso executa o comando sudo su . sudo su roda um shell interativo como root, é basicamente equivalente a sudo -s ou sudo bash (se seu shell for bash). Quando esse comando terminar, se ele retornar um status de sucesso, o comando cp será executado como o usuário original.

No que diz respeito ao shell, sudo é um comando comum, não uma sintaxe especial do shell. Assim, como com qualquer outro comando, && é um separador de comando e o comando à sua esquerda é executado primeiro, depois o comando à sua direita (se o primeiro comando tiver sido bem-sucedido).

 sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/ && exit

Essa variante faz o mesmo, exceto que sai do shell pai quando sudo su retorna e o arquivo foi copiado (supondo que essas operações foram bem-sucedidas). O comando su executa um shell interativo, que executa os comandos que você passa como entrada, não os comandos que o shell pai executará posteriormente.

Se você quiser executar dois comandos como root, executando o segundo somente se o primeiro for bem-sucedido, será possível invocar sudo duas vezes:

sudo command1 && sudo command2

ou você pode fazer sudo invocar um shell e usar o operador && nesse shell aninhado:

sudo sh -c 'command1 && command2'

No seu caso, você só está executando um único comando, então é só

sudo cp /home/sk/keys/master.pem /home/sg-user/keys/

sudo su é basicamente sempre inútil, porque os sudo e su são usados para alterar usuários. Como sudo já executa o comando especificado como root, su é redundante. Isso apenas executa um shell como root, o que você pode fazer com sudo su .

    
por 14.06.2015 / 18:43

Tags