Como eu uso o SSH para copiar um arquivo para um servidor remoto sob um usuário diferente?

3

Eu tenho um arquivo no meu computador local que desejo copiar para um servidor remoto usando o programa SSH (não scp, não rsync, não sftp), o arquivo local é uma chave privada SSL e não quero criar nenhum arquivo. cópias temporárias no servidor remoto durante a transferência.

O usuário root no servidor remoto não pode efetuar login via SSH por motivos de segurança, entretanto meu usuário remoto (com o mesmo nome de usuário do meu usuário local) pode fazer alterações na raiz através do comando sudo após um prompt de senha.

Problema: Como copio o arquivo local, efetuo login via SSH, alterno para o usuário root com o prompt sudo password e, em seguida, gravo o arquivo no servidor remoto em um diretório de usuário root? E, de preferência, tudo em um único comando de linha!

    
por Run.dll 28.02.2016 / 12:14

2 respostas

3

cat é seu amigo:

cat key | ssh user@host sudo "cat > final_location"

Mas isso exigiria autenticação sem senha (pode ser superada usando ControlMaster ) e sem senha sudo ( NOPASSWD ou autenticação usando pam_ssh_agent_auth - eu recomendo testar essa, se você estiver familiarizado com ssh-agent ).

Você também pode querer temporariamente permitir logins de raiz (com chave pública - existe a opção PermitRootLogin without-password , que faz exatamente o que você quer) e então você pode simplesmente usar o método scp .

Caso contrário, não creio que haja outro modo razoável, exceto o método Copiar Colar.

    
por 28.02.2016 / 12:32
1

Isso fará o que você quer fazer. Observe a opção -t que é passada para ssh. Isso atribui um TTY para que o prompt de senha do sudo funcione corretamente.

TEXT='cat ~/.ssh/id_dsa.pub' ssh user@host -t sudo "bash -c \"echo '$TEXT' > foo.pub\""

Isso funciona enquanto não houver cotações únicas nos dados de entrada. Se houver, você pode usar a base64 para codificar / decodificar os dados durante a transmissão.

TEXT='base64 ~/.ssh/id_dsa.pub' ssh user@host -t sudo "bash -c \"echo '$TEXT' | base64 -d > foo.pub\""
    
por 29.02.2016 / 23:16

Tags