Python远程Linux执行命令与文件传输实现方案

Cora
Cora
发布时间:2026-10-12| 3人浏览过
原创

本文介绍如何使用Python通过paramiko模块远程登录Linux并执行命令,同时解决密码登录时的AuthenticationException问题。此外,还介绍了利用expect脚本实现远程文件传输的方法,并提供完整的Python调用示例。

Python远程Linux执行命令实现

在自动化运维和远程管理中,通过Python脚本远程登录Linux服务器并执行命令是一项常见需求。本文将详细介绍如何使用paramiko模块实现这一功能,并解决可能遇到的认证问题。

使用paramiko模块远程登录

paramiko是一个纯Python实现的SSHv2协议库,支持SSHv2服务器和客户端。通过它,我们可以轻松实现远程登录、命令执行和文件传输等功能。

#远程登陆操作系统
def ssh(sys_ip,username,password,cmds):
  try
    #创建ssh客户端
    client = paramiko.SSHClient()
    #第一次ssh远程时会提示输入yes或者no
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #密码方式远程连接
    client.connect(sys_ip, 22, username=username, password=password, timeout=20)
    #互信方式远程连接
    #key_file = paramiko.RSAKey.from_private_key_file("/root/.ssh/id_rsa")
    #ssh.connect(sys_ip, 22, username=username, pkey=key_file, timeout=20)
    #执行命令
    stdin, stdout, stderr = ssh.exec_command(cmds[key])
    #获取命令执行结果,返回的数据是一个list
    result = stdout.readlines()
    return result
  except Exception, e:
    print e
  finally:
    client.close()
 
if __name__=="__main__":
  sys_ip = "192.168.0.102"
  username = "root"
  password = "1"
  cmds = "pwd"
  print ssh(sys_ip,username,password,cmds)

解决密码登录时的AuthenticationException问题

在脚本执行密码登录时,可能会遇到AuthenticationException错误。这通常是因为用户的SSH配置只支持键盘交互或密钥验证,而脚本运行时没有tty(键盘交互)。

为了解决这个问题,可以尝试在connect方法中添加allow_agent=False和look_for_keys=False参数,以禁用SSH代理和密钥查找。然而,这并不总能解决问题。

client.connect(sys_ip, 22, username=username, password=password, timeout=20, allow_agent=False, look_for_keys=False)

使用expect脚本实现远程执行

如果paramiko模块无法解决问题,可以考虑使用shell命令expect来实现远程执行。expect是一个用于自动化交互式应用程序的工具,可以模拟用户输入。

首先,创建一个shell脚本remotExect.sh,用于处理远程登录和命令执行。

#!/usr/bin/expect
set timeout 2
set local_file [lindex $argv 0]
set username  [lindex $argv 1]
set password  [lindex $argv 2]
set hostname  [lindex $argv 3]
set remote_file [lindex $argv 4]
 
spawn scp $local_file $username@$hostname:$remote_file
expect {
"yes/no"#是为了捕获首次登录,要手动输入yes/no的情况
{send "yes\r";}
"password:"#为例捕获需要输入密码的行为
{send "$password\r";}
}
expect eof

然后,在Python中执行该shell脚本。

import os
cpFileCmd = "./remotecp.sh 1.txt root 1 192.168.0.102 /opt/1.txt"
os.system(cpFileCmd)

总结

通过本文的介绍,我们了解了如何使用Python通过paramiko模块远程登录Linux并执行命令,以及如何解决密码登录时的AuthenticationException问题。此外,还介绍了利用expect脚本实现远程文件传输的方法。这些技术在实际应用中非常有用,可以帮助开发者更高效地进行远程管理和自动化运维。

以上就是Python远程Linux执行命令与文件传输实现方案的详细内容,更多关于Python远程执行命令、paramiko模块、SSH连接、文件传输的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。