通过Python Paramiko以其他用户身份运行SFTP操作

我想使用服务帐户连接到我的Ubuntu服务器,但代表另一个用户执行文件传输操作.我的sshd_config具有以下内容(以及其他内容):

PubKeyAuthentication yes
PasswordAuthentication yes
Subsystem sftp /usr/lib/openssh/sftp-server

我尝试了以下代码,但没有成功:

t = paramiko.Transport(('<address>', <port>))  
t.connect(username='serviceAccount', password='<password>')
channel = t.open_session()
channel.exec_command('sudo su -l <other user> -c /usr/lib/openssh/sftp-server')
sftp = t.open_sftp_client()
file = sftp.file("<some path>", "w", bufsize=...)
file.write(...)
file.close()
sftp.close()
channel.close()
t.close()

这是运行此代码时看到的错误:

IOError: [Errno 13] Permission denied

解决方法:

首先,自动化su或sudo不是正确的解决方案.

正确的解决方案是直接使用您需要使用的帐户登录.

无论如何,open_sftp_client和exec_command在两个不同的SSH通道上运行.因此,由于sftp在非高架会话上运行,因此您的代码无法工作,这完全不受exec_command的影响.

在Paramiko中,没有使用su来运行SFTP的明确支持(因为这种方法是错误的并且几乎没有标准化).

您将必须实现SFTPClient.from_transport的替代方案,该替代方案将调用exec_command而不是invoke_subsystem.

上一篇:su, sudo, 限制root远程登陆,df分区挂载,du占用空间,添加磁盘,fdisk分区


下一篇:力扣每日一题2021-11-12猜数字大小II