2017-09-18 258 views
0

我使用paramiko put方法從本地發送文件到遠程服務器。 但是,我遇到執行sudo su - user命令從遠程查看文件的問題。我也嘗試從本地更改權限,但文件權限在傳輸時保持不變。python paramiko執行sudo

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() 

是否有使用paramkio使傳輸文件可以從遠程讀取執行sudo su - user命令的方法嗎?

謝謝!

+0

'ssh.exec_command(命令)'是這樣的執行一個命令 –

+0

@RajarshiDas ...正確的,但是它運行在它自己的shell中,所以任何改變都不會被'open_ssh' –

回答

0

沒有你不能做到這一點......但是你可以排序解決它,通過使用sudo其上傳後的文件移動

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() 

sudu-S標誌告訴它預計密碼來自標準輸入

-p ''標誌告訴sudo來使用''或空字符串作爲提示輸入密碼

不能只是在exec_command使用sudo su - username調用open_ssh之前,因爲每次調用exec_command運行在自己的子shell,這樣的更改將不會傳播回主會議

+0

的調用所感謝。你知道在使用paramiko時是否有辦法改變權限並保留它? – Young

+0

有沒有......我想你可能會混淆你的系統權限,使用softlinks進入保護區,或者只是授予你登錄 –

+0

的用戶的權限我看到感謝您的幫助! – Young