I am using paramiko put method to send file from local to remote server.
However, I am having problem executing sudo su - user command to view the file from remote. I also tried changing the permission from local but the file permission stays intact when transferred.
import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(<Host>, username=<User Name>, password=<Password) sftp = ssh.open_sftp() sftp.put(<Source>, <Destination>) sftp.close()
Is there a way to execute sudo su - user command using paramkio so the transferred files can be read from remote?
Thank you!
Advertisement
Answer
no you cannot do this… however you can sort of work around it, by using sudo to move the file after its uploaded
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(<Host>, username=<User Name>, password=<Password)
sftp = ssh.open_sftp()
sftp.put(<Source>, destination_i_CAN_write_to)
sftp.close()
#now move the file to the sudo required area!
stdin, stdout, stderr = ssh.exec_command("sudo -S -p '' mv /uploaded/path/to/file.txt /restricted/sudo/path/file.txt",**kwargs)
stdin.write(SUDO_PASSWORD + "n")
stdin.flush()
the -S flag on sudu tells it to expect the password to come from stdin
the -p '' flag tells sudo to use '' or the empty string as the prompt for the password
you cannot simply use sudo su - username in an exec_command before the call to open_ssh, because each call to exec_command runs in its own subshell, as such the changes will not propagate back to the main session