Sem sudo
, o comando ssh server "cd path/to/directory && cp image1.png image2.png"
não tem privilégios para chmod
das permissões.
Mas com sudo
, mas sendo executado após ssh
, ele nunca recebe entrada de senha para ele no servidor remoto, portanto, a solução usa -S
e canaliza uma senha para sudo
da seguinte forma:
ssh server " cd path/to/directory && echo sudo_password | sudo -S chmod 600 image2.png && cp image1.png image2.png"
EDITAR:
No entanto, como @terdon marcado, não precisamos alterar as permissões aqui, mas use sudo cp
, então vem para:
ssh server " cd path/to/directory && echo sudo_password | sudo -S cp image1.png image2.png"
ou (no caso de você achar que sua senha pode ser lida)
ssh server -t " cd path/to/directory && sudo cp image1.png image2.png"
ATUALIZAÇÃO: também @terdon avisou e acrescentei isso, porque acho importante enfatizar e enfatizar essa possível realização:
I really would remove this suggestion of using -S, it is not needed
and very dangerous (see @mikserv's comments and my answer). It is also
pointless. The only "advantage" you mention, that of being able to
pipe is a fringe case and in most situations you could just pipe on
the server instead. You can also use sshpass as you suggested or set
up passwordless sudo. All sorts of ways that don't store a server's
password as plaintext. – terdon
Por um lado, isso é bom para a automação sem obter sudo
prompts de senha e, para ter código / script completamente automatizado, você adicionaria sshpass -p password ssh...
.
No entanto, no servidor em que outras pessoas podem facilmente ler sua senha sudo fornecida como texto aberto durante a sessão ssh
, isso não é recomendado das perspectivas de segurança. Portanto, para ter um sudo
com ssh
e seja um uso seguro, use ssh -t
ssh -t server "cd path/to/directory && sudo chmod 600 image2.png && cp image1.png image2.png"
No entanto, com -t
, é impossível canalizar ssh "sudo command"| command
, por exemplo, ssh -t server "cd path/to/directory && sudo"|grep "text"
, mas é possível usar ussage de -S e senha de eco, por exemplo. ssh server 'echo password | sudo -S ls -l'| grep 'a'