加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Python远程连接服务器用它就可以了

发布时间:2021-12-07 15:36:25 所属栏目:语言 来源:互联网
导读:使用fabric玩转远程服务器管理 fabric基于强大的paramiko、invoke等库,构建出一整套简单易用的API,使得我们使用简洁的语句就可以应付常见的各种远程服务器操作,使用pip install fabric完成安装,本文演示对应版本为2.6。 1. 连接到远程服务器并执行终端命
Python远程连接服务器用它就可以了
使用fabric玩转远程服务器管理
fabric基于强大的paramiko、invoke等库,构建出一整套简单易用的API,使得我们使用简洁的语句就可以应付常见的各种远程服务器操作,使用pip install fabric完成安装,本文演示对应版本为2.6。
 
1. 连接到远程服务器并执行终端命令
要建立并保持对远程服务器的连接,我们需要对fabric.Connection()进行实例化,其基础参数有:
 
「host:」 str型,格式如'用户名@host:端口',其中':端口'部分可以省略,默认端口为22
「connect_kwargs:」 dict型,用于传入其他连接所需参数,常用的有:
其他可用参数你可以前往
 
https://docs.paramiko.org/en/latest/api/client.html#paramiko.client.SSHClient.connect的Parameters了解更多。
 
「password:」 str型,当以密码方式连接时,用于传入与host参数对应的密码
「pkey:」 str型,当以私钥方式连接时,用于设置对应密钥
「timeout:」 float型,用于设置TCP连接的超时时长(单位:秒)
「config:」 fabric.Config型,用于设置更多复杂功能参数,详见https://docs.fabfile.org/en/2.6/api/config.html
先来看一个最基础的例子:
 
from fabric import Connection
 
# 建议将ssh连接所需参数变量化
user = '用户名'
host = 'host地址'
password = '密码'
 
 
# 利用fabric.Connection快捷创建连接
c = Connection(host=f'{user}@{host}',
               connect_kwargs=dict(
                   passwordpassword=password
               ))
 
# 利用run方法直接执行传入的命令
c.run('pwd');
 
 
可以看到,非常简单就完成了连接服务器及执行指定命令的过程,且run()方法所执行的命令打印出的结果,可以通过stdout属性进行保存:
 
# hide=True抑制run()过程对执行结果的自动打印
output = c.run('df -h', hide=True).stdout
print(output)
 
 
获悉了fabric的基础使用后,接下来我们来学习一些进阶内容:
 
2. 配置sudo命令密码自动预填入
我们都知道,对于非root用户,在执行某些权限较高的命令时需要添加sudo前缀,并在会话的初次执行时需要手动输入当前用户的密码,而在fabric中,有两种方式可以实现这个步骤的自动化:
 
(1) 方式1:配合invoke.Responder
 
我们可以配合invoke.Responder来实现当命令行返回密码输入提示时,自动输入并执行指定的命令:
 
from invoke import Responder
 
# 配置命令行内容监听规则
sudopass = Responder(
    pattern=f'[sudo] password for {user}:',
    response=password+'n'
)
 
# 注意需要设置pty=True
c.run('sudo pwd', pty=True, watchers=[sudopass]); 

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!