Python 远程连接服务器用它就够了
时间:2021-12-07 11:07:47
手机看文章
扫描二维码
随时随地手机看文章
[导读]作者|费弗里来源|Python大数据分析❝本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes❞1简介日常工作中经常需要通过SSH连接到多台远程服务器来完成各种任务,当需要操作的服务器众...
作者 | 费弗里
来源 | Python大数据分析 可以看到,非常简单就完成了连接服务器及执行指定命令的过程,且 获悉了 以上就是本文的全部内容,欢迎在评论区与我进行讨论~往期回顾资讯人工智能在数学领域实现新发现和新见解资讯
AI监视打工人,这个国家明确保护摸鱼资讯全球首个活体机器人,能生娃技术Python实现人脸监测制作摸鱼神器
分享点收藏点点赞点在看
来源 | Python大数据分析
❝本文示例代码及文件已上传至我的Github
仓库https://github.com/CNFeffery/DataScienceStudyNotes❞
1 简介
日常工作中经常需要通过SSH
连接到多台远程服务器来完成各种任务,当需要操作的服务器众多,且要执行的任务涉及命令繁多时,如果可以以自动化的方式模拟SSH
连接及执行命令的繁琐过程,对工作效率的提升是非常可观的。本文我就将带大家学习在Python
中使用非常强大的fabric
库来对常用的远程服务器连接管理操作进行自动化:2 使用fabric玩转远程服务器管理
fabric
基于强大的paramiko
、invoke
等库,构建出一整套简单易用的API
,使得我们使用简洁的语句就可以应付常见的各种远程服务器操作,使用pip install fabric
完成安装,本文演示对应版本为2.6
。2.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(
password=password
))
# 利用run方法直接执行传入的命令
c.run('pwd');
run()
方法所执行的命令打印出的结果,可以通过stdout
属性进行保存:# hide=True抑制run()过程对执行结果的自动打印
output = c.run('df -h', hide=True).stdout
print(output)
fabric
的基础使用后,接下来我们来学习一些进阶内容:2.2 配置sudo命令密码自动预填入
我们都知道,对于非root
用户,在执行某些权限较高的命令时需要添加sudo
前缀,并在会话的初次执行时需要手动输入当前用户的密码,而在fabric
中,有两种方式可以实现这个步骤的自动化:2.2.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]);
2.2.2 方式2:利用fabric.Config设置sudo密码
除了上一种方式外,我们还可以使用fabric.Config
在创建连接时就一次性提前配置好sudo
密码,之后需要执行sudo
命令时用sudo()
方法代替run()
方法即可:from fabric import Config
# 预先配置sudo密码
config = Config(overrides={
'sudo': {
'password': password
}
})
c = Connection(host=f'{user}@{host}',
connect_kwargs={'password': password},
config=config)
c.sudo('pwd');
2.3 远程文件传输
很多朋友都知道可以使用pscp
、xshell
之类的工具手动进行服务器与本地之间的文件相互传输,这些任务我们同样可以在fabric
中自动化进行:2.3.1 从本地上传文件到服务器
使用put()
方法可以将指定的本地文件上传至服务器的指定位置,remote
参数对应服务器目标保存位置:c = Connection(host=f'{user}@{host}',
connect_kwargs={'password': password})
# 创建示例文件
with open('file_transfer.txt', 'w') as d:
d.write('1')
# 利用put方法上传至服务器
c.put('file_transfer.txt', remote='/home/feffery/')
# 打印已上传文件内容
c.run('cat /home/feffery/file_transfer.txt');
2.3.2 从服务器下载指定文件到本地
相反的,当我们需要从服务器取回指定文件到本地时,就可以使用get()
方法:c = Connection(host=f'{user}@{host}',
connect_kwargs={'password': password})
# 向文件末尾追加行
c.run('echo "\n2" >> file_transfer.txt')
c.get('/home/feffery/file_transfer.txt')
print(open('file_transfer.txt').read())
AI监视打工人,这个国家明确保护摸鱼资讯全球首个活体机器人,能生娃技术Python实现人脸监测制作摸鱼神器
分享点收藏点点赞点在看