Alterando usuário enquanto scp

16

Eu preciso copiar o arquivo entre máquinas Linux. O problema que o usuário que utilizo para fazer login ( myuser) é diferente do usuário que pode acessar o arquivo.

Se eu for sshpara a máquina, posso trocar de usuário sudo su someuser, posso fazê-lo de alguma forma enquanto scp?

Ao usar o WinSCP, eu consegui fazê-lo, configurando o SCP / Shell, então acredito que deve haver uma maneira semelhante de fazê-lo via shell puro.

Tarlog
fonte
Estou confuso. Por que você não faz login como o usuário que manipula o arquivo?
rahmu
Porque é impossível fazer login usando o outro usuário.
Tarlog 25/02
Que tal se conectar sshe executar scp, algo como isto ssh myuser@host "sudo scp ...":?
rahmu
Talvez a resposta aqui possa funcionar em tal situação? unix.stackexchange.com/questions/43094/… @Tarlog Isso pressupõe que na própria máquina remota, você pode ssh someuser @ remote #
Bernhard

Respostas:

9

Supondo que o usuário para o qual você PODE ssh não precise de uma senha para sudo su no usuário de destino, você pode tentar o seguinte:

dd if=myfile | ssh some.host "sudo -u targetuser dd of=myfile" 

... Lembre-se, ainda não estou convencido de que simplesmente configurar targetuserapenas permitir scp / sftp / rsync sobre SSH e usar um par de chaves RSA para autenticação não seja uma opção muito melhor.

Shadur
fonte
1
ou tar -cvf - * | ssh user@host "sudo -u targetuser tar -C /targetdir -xf -"para um monte de arquivos
Matt
Também é verdade, e eu suponho que podemos debater se -zou -jsão úteis, dependendo da velocidade de conexão e hardware de computador de ambos os lados ...
Shadur
3

Se você conhece as credenciais para o outro usuário ( someuser), basta especificá-las na sua scpchamada.

Na man scppágina:

Os nomes de arquivos podem conter uma especificação de usuário e host para indicar que o arquivo deve ser copiado para / desse host. Os nomes de arquivos locais podem ser explicitados usando nomes de caminho absolutos ou relativos para evitar que o scp trate nomes de arquivos contendo ':' como especificadores de host. Cópias entre dois hosts remotos também são permitidas.

Aqui está a sintaxe usada:

[[user@]host:]/path/to/file

Exemplo

Você quer copiar o arquivo /home/foo/bara partir host1de seu localhost, utilizando usuário someuser, aqui está o comando:

scp someuser@host1:/home/foo/bar .

Você será solicitado a autenticação (senha, chaves, ...).

rahmu
fonte
1
É impossível fazer login como outro usuário.
Tarlog 25/02
Em seguida, estabeleça um login somente para scp / rsync com chaves RSA.
Shadur
1
É impossível usar o outro usuário usando qualquer tipo de login. Além disso, eu já uso chaves RSA para ssh / scp.
Tarlog 25/02
1

É provável possível , mas eu diria que é uma maneira muito estranha de fazer isso.

Minha primeira sugestão é fazer login como esse usuário. Mesmo que você não tenha a senha do usuário, você pode adicionar sua própria chave pública ssh às chaves_estabelecidas deles e, em seguida, scp usando a chave deles, como mostra rahmu.

Se isso não for possível, minha segunda sugestão é fazer o login por ssh, sudo para o usuário e criar um arquivo tarfile dos arquivos que você deseja copiar e colocá-lo em algum lugar que seu próprio usuário possa ler. Em seguida, verifique esse tarfile.

Jenny D
fonte
É impossível fazer login no outro usuário. Sim, eu mesmo descobri a segunda sugestão. Procurando uma maneira fácil :)
Tarlog
O link postado pelo gcb deve ser útil, então. Pelo menos se você estiver fazendo isso mais de uma vez. Ou, é claro, você pode alterar os direitos de acesso ao arquivo para dar acesso ao seu próprio usuário.
Jenny D
Bem, estou tentando criar um script (que será usado várias vezes, é claro) que será usado por diferentes usuários. Portanto, conceder o acesso a mim realmente não ajudará. Qualquer pessoa que consiga 'sudo su otheruser' deve poder executar o script.
Tarlog 25/02
Peguei vocês. Eu começaria com o link do gcb, se você tiver problemas com o script, poste-o e veja se podemos obter alguma ajuda para o crowdsource.
Jenny D