scp para o servidor remoto com sudo

54

Eu tenho um arquivo no servidor A (que está por trás de um NAT, portanto, não pode ser endereçado diretamente). O arquivo precisa ser copiado para o servidor B em um diretório restrito à raiz. Eu tenho uma conta no servidor B com privilégios de sudo. Qual é a sintaxe do comando scp?

    
por Neil 07.05.2010 / 23:42

6 respostas

50

Primeiro, você precisa copiar o arquivo para um lugar onde tenha acesso de gravação sem sudo,

scp yourfile serverb:

Em seguida, mova o arquivo usando o sudo

ssh serverb sudo mv yourfile /path/to/the/destination

Se você não tiver um lugar gravável, crie um diretório temporário com permissão de gravação para seu usuário.

ssh serverb sudo mkdir tempdir && sudo chmod 777 tempdir
scp yourfile serverb:tempdir
ssh serverb mv tempdir/yourfile /path/to/the/destination
    
por 08.05.2010 / 00:34
35

Com o SCP, você tem que fazer em duas etapas, no entanto, você pode fazê-lo em um com o rsync da seguinte forma:

rsync --rsync-path="sudo rsync" <LOCALFILE> USER@SERVER2:/root

Nota: Isso requer a configuração NOPASSWD sudo. Se você tiver que digitar a senha para o sudo, então é necessário o caminho de dois passos.

Para copiar o diretório, você precisa adicionar o parâmetro -r . E -v para saída detalhada.

Para usar o método acima com credenciais, você precisa adicioná-las ao seu arquivo ~/.ssh/config , por exemplo,

Host SERVER2
  HostName server2.example.colm
  User USER
  #IdentityFile ~/.ssh/custom_key.pem
    
por 16.01.2014 / 16:58
18

Você pode usar o ssh e o tar para contornar isso:

ssh -t host 'sudo -v'
ssh -C host 'cd /; sudo tar cf - path/to/file/or/dir' | tar xpsf - --preserve

Isso primeiro atualiza seu sudo timestamp (solicitando uma senha, se necessário, que requer um tty ( ssh -t )) e, em seguida, usa o sudo para criar um tarball remotamente e extrai-lo localmente.

"tar" no RedHat 5 requer as opções "--preserve" após o comando "xpsf -".

    
por 12.12.2011 / 17:04
4

Você pode usar o comando sftp com sudo, por exemplo:

sftp -s 'sudo -u REMOTE_SUDO_USER /usr/libexec/openssh/sftp-server' REMOTE_USER@HOST
    
por 02.07.2014 / 16:42
0

Se você precisar digitar a senha para o sudo todas as vezes, salve-o em um arquivo:

echo "Enter password: "; read -s password; echo $password > password_file

e depois enviá-lo junto com o arquivo de origem.

cat password_file source_file | ssh remote_host 'sudo -S sponge target_file'

Você pode usar tee em vez de sponge se não tiver mais recursos.

    
por 18.10.2017 / 00:12
-1
current server $ sudo scp username@server:source/path/filename /tmp/

Ele irá copiar um arquivo específico da fonte para / tmp / no servidor atual

    
por 08.02.2016 / 22:50