怎么通过Python实现linux远程登陆及sftp

怎么通过Python实现linux远程登陆及sftp

浏览次数:
信息来源: 用户投稿
更新日期: 2025-12-27 16:35:42
文章简介

1.使用shell命令$sshpass-p${passwd}ssh-p${port}-l${user}-oStrictHostKeyChecking=noxx.xx.xx.xx"ls-l"然后你

2025阿里云双十一服务器活动

1.使用shell命令

$sshpass-p${passwd}ssh-p${port}-l${user}-oStrictHostKeyChecking=noxx.xx.xx.xx"ls-l"

然后你会发现,你的输出有很多你并不需要,但是又不去不掉的一些信息。对于shell命令,可以直接使用管道,或者将标准输出重定向到文件的方法取得执行结果。

2.使用subprocess

通过Python可以想到使用os.popen,os.system,commands,subprocess等一些命令执行库来间接获取系统信息。这些库获取的output不仅有标准输出,还包含标准错误信息。所以每次都要对output进行数据清理,然后整理格式化,才能得到我们想要的数据。

ssh_cmd="sshpass-p${passwd}ssh-p22-lroot-oStrictHostKeyChecking=noxx.xx.xx.xx'ls-l'"

status,output=subprocess.getstatusoutput(ssh_cmd)

#数据清理

间接使用ssh命令的几个问题:

  • 需要额外安装sshpass(如果不免密的话)

  • 干扰信息太多,数据清理、格式化相当麻烦

  • 代码实现不够优雅,可读性太差

  • ssh连接不能复用,一次连接仅能执行一次命令

  • 代码无法全平台,仅能在Linux和OSX上使用

  • 3.使用Paramiko

  • python3-mpipinstall

  • 方法1:基于用户名和密码的sshclient方式登录该方法无法复用ssh连接。

    #允许连接不在know_hosts文件中的主机

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    ssh.connect("xx.xx.xx.xx",username="root",port=22,password="you_password")

    ssh_stdin,ssh_stdout,ssh_stderr=ssh.exec_command("ls-l")

    ssh.close()

  • 方法2:基于用户名和密码的transport方式登录该方法可以复用连接。

    trans=paramiko.Transport(("xx.xx.xx.xx",22))

    trans.connect(username="root",password="you_passwd")

    怎么通过Python实现linux远程登陆及sftp

    ssh_stdin,ssh_stdout,ssh_stderr=ssh.exec_command("ls-l")

    trans.close()

  • 方法3:基于公钥的SSHClient方式登录该方法无法复用ssh连接。

    #如果建立密钥对时设置了密码,password为passphrase。如果没有passphrase则无需指定password参数。

    pkey=paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa',password='12345')

    ssh.connect(hostname='xx.xx.xx.xx',

    stdin,stdout,stderr=ssh.exec_command('ls-l')

    #结果放到stdout中,如果有错误将放到stderr中

    ssh.close()

  • 方法4:基于公钥的Transport方式登录该方法可以复用连接。

    #如果建立密钥对时设置了密码,password为passphrase。如果没有passphrase则无需指定password参数。

    pkey=paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa',password='12345')

    trans=paramiko.Transport(('xx.xx.xx.xx',22))

    trans.connect(username='you_username',pkey=pkey)

    #执行命令,和传统方法一样

    stdin,stdout,stderr=ssh.exec_command('df-hl')

    print(stdout.read().decode())

    trans.close()

  • sftp文件传输

    trans=paramiko.Transport(('xx.xx.xx.xx',22))

    trans.connect(username='you_username',password='you_passwd')

    #实例化一个sftp对象,指定连接的通道

    sftp=paramiko.SFTPClient.from_transport(trans)

    sftp.put(localpath='/tmp/11.txt',remotepath='/tmp/22.txt')

    sftp.get(remotepath='/tmp/22.txt',localpath='/tmp/33.txt')

    trans.close()

    以上就是怎么通过Python实现linux远程登陆及sftp的详细内容,更多请关注主机测评网其它相关文章!

    标签:
  • 什么是多云(多云是什么类型的云)
    « 上一篇
    返回列表
    下一篇 »

    如本文对您有帮助,就请抽根烟吧!