Paramiko exec_command执行mv命令在RHEL 7.9上报找不到文件错误排查
问题排查解决思路
- 先校验路径拼写是否正确
你提供的代码中源文件路径为/tmp/filname.txt(缺失字母e),但报错信息中显示的源文件路径为/tmp/filename.txt,先确认是代码笔误还是真实拼写错误,如果是代码拼写错误直接修正即可。 - 验证路径与文件真实存在性
手动登录到问题RHEL 7.9服务器,分别执行以下命令确认路径有效性:
同时确认你使用的SSH用户在未提权时就有权限读取这两个路径,避免路径被权限拦截导致判断为不存在。# 确认目标目录存在 ls -ld /etc/somedir # 确认源文件存在 ls -l /tmp/filename.txt - 排查sudo执行环境问题
RHEL 7.9默认的sudo配置通常开启了requiretty限制,要求sudo必须运行在终端环境下,Paramiko默认的exec_command不会分配伪终端,会导致sudo执行异常。修改代码添加get_pty=True参数即可:
同时手动执行stdin, stdout, stderr = client.exec_command(f'sudo mv /tmp/filename.txt {dirpath}/filename.txt', get_pty=True)sudo mv /tmp/filename.txt /etc/somedir/filename.txt验证该SSH用户是否配置了无密码sudo权限,以及sudoers配置是否限制了可执行命令的路径范围。 - 排查安全规则限制问题
RHEL 7.9默认开启SELinux,可能会限制/tmp目录下的文件移动到/etc目录。临时关闭SELinux测试:
如果测试可正常执行,说明是SELinux规则拦截,给对应文件添加允许移动的SELinux规则即可。setenforce 0 - 排查路径变量隐藏字符问题
打印repr(dirpath)确认变量中是否包含看不见的换行、空格、特殊字符,避免实际拼接的路径和预期不一致。
内容的提问来源于stack exchange,提问作者Pratik Potdar
相关产品推荐
相关产品推荐

