返回顶部
首页 > 资讯 > 后端开发 > Python >SSH连接与自动化部署工具parami
  • 872
分享到

SSH连接与自动化部署工具parami

工具SSHparami 2023-01-31 08:01:58 872人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

paramiko是基于python实现的ssh2远程安全连接,支持认证及密钥方法。可以实现远程命令执行,文件传输,中间SSH代理等功能,相对于Pexpect,封装层次更高。 pip install Paramiko Http://www

paramiko是基于python实现的ssh2远程安全连接,支持认证及密钥方法。可以实现远程命令执行,文件传输,中间SSH代理等功能,相对于Pexpect,封装层次更高。

pip install Paramiko

Http://www.paramiko.org/
demo:https://GitHub.com/paramiko/p...

如果在linux环境,还需安装依赖:crypto,ecdsa,python3-devel。

paramiko包含两个核心组件:SSHClient类,SFTPClient类

密钥方式登录

import paramiko, base64,getpass
 
paramiko.util.log_to_file('syslogin.log') #日志记录
try:
        key=paramiko.RSAKey.from_private_key_file('pk_path')
except paramiko.PassWordRequiredException:
        password = getpass.getpass('RSA key password: ')
        key = paramiko.RSAKey.from_private_key_file('pk_path', password)    # 需要口令的私钥
#key = paramiko.RSAKey(data=base64.decodestring('AAA...'))
client = paramiko.SSHClient()
# client.get_host_keys().add('ssh.example.com', 'ssh-rsa', key)
client.load_system_host_keys()#~/.ssh/known_hosts
client.connect('ssh.example.com', 22,username='strongbad', password='thecheat',pkey=key)
stdin, stdout, stderr = client.exec_command('ls')
# stdin, stdout, stderr=ssh.exec_command('sudo su')
# stdin.write('123456')
for line in stdout:
    print('... ' + line.strip('\n'))
#使用send
# cmds=['sudo su\n', 'cd /var/log\n', 'ls\n'] #利用send函数发送cmd到SSH server,添加'\n'做回车来执行shell命令。注意不同的情况,如果执行完telnet命令后,telnet的换行符是\r\n
# ssh=s.invoke_shell() #在SSH server端创建一个交互式的shell,且可以按自己的需求配置伪终端,可以在invoke_shell()函数中添加参数配置。
# for cmd in cmds:
#         time.sleep(1)
#         ssh.send(cmd) #利用send函数发送cmd到SSH server,
#         out = ssh.recv(1024) #.recv(bufsize)通过recv函数获取回显。
#         print out
client.close()

用户名密码方式登录

#####################################################################################
import paramiko
 
paramiko.util.log_to_file('syslogin.log') #日志记录
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('192.168.8.248', 22, username='root', password='password', timeout=4)
stdin, stdout, stderr = client.exec_command('ls -l')
#print(stdout.read())
for line in stdout.readlines():
  print(line)
client.close()

SSHClient方法参数说明
connect(hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None)

pkey-私钥类型
key_filename-str or list(str) 私钥文件或其列表
timeout-以秒为单位
allow_agent-为False时禁用连接到SSH代理
look_for_keys-为False时禁用在~/.ssh中搜索私钥文件
exec_command(command, bufsize=-1, timeout=None, get_pty=False)
command-字符串

load_system_host_keys(filename=None)指定公钥文件,默认为~/.ssh/known_hosts

set_missing_host_key_policy(policy):设置连接的远程主机没有本地主机密钥时的策略。目前支持三种: RejectPolicy (the default), AutoAddPolicy, WarningPolicy

上传与下载文件

#上传批量文件到远程主机
import paramiko
import os
import datetime
 
hostname = '74.63.229.*'
username = 'root'
password = 'abc123'
port = 22
local_dir = '/tmp/'
remote_dir = '/tmp/test/'
if __name__ == "__main__":
    #    try:
    t = paramiko.Transport((hostname, port))
    t.connect(username=username, password=password)
    sftp = paramiko.SFTPClient.from_transport(t)
    #        files=sftp.listdir(dir_path)
    files = os.listdir(local_dir)
    for f in files:
        '#########################################'
        'Beginning to upload file %s ' % datetime.datetime.now()
        'Uploading file:', os.path.join(local_dir, f)
        # sftp.get(os.path.join(dir_path,f),os.path.join(local_path,f))
        sftp.put(os.path.join(local_dir, f), os.path.join(remote_dir, f))
        'Upload file success %s ' % datetime.datetime.now()
    t.close()

参考http://www.cnblogs.com/yangsh...

Fabric是基于paramiko的基础上做了一层更高的封装,操作起来更加方便。
官网:http://www.fabfile.org/index....
github:https://github.com/fabric/fab...

依赖crypto,paramiko.注意:fabric目前不支持Python3.不过github上有个支持py3的版本https://github.com/mathiasert...

在windows上的安装:
1、安装pycrypto.
有几种方式安装:
A.win7下安装 MSVC2010,然后通过pip install pycrypto编译安装.

B.选择别人编译好的。
pycrypto-for-python-3-2及以下
pycrypto-for-python-3-4

2、支持Python3的版本安装:pip install Fabric3

fabfile.py
from fabric.api import run
def host_type():
    run('uname -s')

通过fab命令执行。-f指定文件,-H指定主机列表.

$ fab -f fabfile.py -H localhost,linuxbox host_type

fab参数说明:
-f 指定入口3文件
-g 指定网关设备(中转,堡垒机)IP
-H 指定目标主机,多个用“,”分割
-P 异步运行多主机任务
-R 指定角色,以角色来区分机组
-t 设备连接超时时间,秒
-T 远程主机命令执行超时时间,秒
-w 当命令执行失败,发出警告,而不是终止任务。
当然我们完全可以在代码中设定这些选项值,而无需在命令行指定。如下:全局属性设定
env对象的作用是定义fabfile的全局设定,支持多个属性及自定义属性。

env.hosts,定义目标主机,列表
env.exclude_hosts,排除主机,列表
env.user,定义用户名,str
env.port , 定义端口,str
env.password,定义密码,str
env.passwords,字典,但是形式如下:env.passwords={ 'root@192.168.1.21:22':'123456','root@192.168.2.21:22':'1234'}
env.key_filename=None 指定SSH密钥文件,str or list
env.gateway指定网关设备(中转,堡垒机)IP,str
env.roledefs定义角色分组,字典:env.roledefs={ 'WEB':['192.168.1.21','192.168.1.23'],'db':['192.168.1.22','192.168.1.24']}
env.parallel=False是否并发执行任务
env.path=' ' 定义在run/sudo/local使用的$PATH环境变量
env.command_timeout=None
env.timeout=10
env.shell=“/bin/bash -l -c”
env.ssh_config_path=“$HOME/.ssh/config”
env.sudo_password=None
env.sudo_passwords={}
env.use_ssh_config=False
env.warn_only=False,如果为True,当操作遇到错误时,发出警告并继续执行,而不是终止
env.变量名 自定义变量

例如:

@roles('web')
def webtask():
    run('/etc/init.d/Nginx start')
@roles('db')
def dbtask():
    run('/etc/init.d/Mysql start')
 
@roles('web','db')
def publicstask():
    run('uptime')
def deploy():
    execute(webtask)
    execute(dbtask)
    execute(publictask)

然后终端执行命令就可以了

$ fab deploy

命令行传参:

def hello(name="world"):
    print("Hello %s!" % name)
$ fab hello:name=Jeff
Hello Jeff!
Done.

常用API

fabric.api模块:

local,执行本地命令,如local('uname -s')
lcd,切换本地目录,如lcd('/home')
cd,切换远程目录
run,执行远程命令
sudo,sudo方式执行远程命令
put,上传文件到远程主机 put('/home/aaa','/home/xby/aaa')
get,从远程主机下载文件到本地 get('/opt/bbb','/home/bbb')
prompt,获取用户输入
confirm,获得提示信息确认,如confirm('Continue[Y/N]?')
reboot,重启远程主机,如reboot()
@task函数装饰器,标识函数为fab可调用的,否则对fab不可见
@runs_once,标识函数只会执行一次,不受多台主机影响。
@roles,表示函数执行时的主机角色
@parallel(pool_size=)
@with_settings()

fabric.contrib.console.confirm(question, default=True) 用户输入Y/n,返回True/False

示例1:查看本地与远程主机信息:

from fabric.api import *
 
env.user='root'
env.hosts=['192.168.1.2','192.168.1.3']
env.password='123'
 
@runs_once #即使有多台主机,但它只会执行一次
def local_task():
    local('uname -a')
def remote_task():
    with cd("/data/logs"): #这个with的作用是让后面的表达式语句继承当前的状态,实现"cd /data/logs && ls -l"的效果。
        run("ls -l")
$ fab -f sample.py local_task
$ fab -f sample.py remote_task

示例2:动态获取远程目录

from fabric.api import *
from fabric.contrib.console import confirm
 
env.user='root'
env.hosts=['192.168.1.2','192.168.1.3']
env.password='123'
 
@runs_once
def input_raw():
    return prompt("please input dir name:",default='/home')
def worktask(dirname):
    run("ls -l "+dirname)
@task
def Go():
    dirname=input_raw()
    worktask(dirname)

示例3:网关模式文件上传与执行

其实只要定义好env.gateway的ip就行了。相比paramiko确实简化了不少。

from fabric.api import *
from fabric.contrib.console import confirm
from fabric.context_managers import *
 
env.user='root'
env.hosts=['192.168.1.2','192.168.1.3']
env.password='123'
env.gateway='192.168.22.2'
 
lpath='/home/install/lnmp.tar.gz'
rpath='/tmp/install'
 
@task
def put_task():
      run("mkdir -p /tmp/install")
      with settings(warn_only=True): #put出现异常时,发出警告,继续执行,不要终止。
        result=put(lpath,rpath) #上传
       if result.failed and not confirm("put failed,continue[Y/N]?"):
        abort("Aborting")
@task 
def run_task():
      with cd("/tmp/install"):
         run("tar -zxvf lnmp.tar.gz")
       with cd("lnmp"):
        run("./install.sh")
 
@task go():
  put_task()
  run_task()

多彩输出

fabric.colors.blue(text, bold=False)
fabric.colors.cyan(text, bold=False)
fabric.colors.green(text, bold=False)
fabric.colors.magenta(text, bold=False)
fabric.colors.red(text, bold=False)
fabric.colors.white(text, bold=False)
fabric.colors.yellow(text, bold=False)

from fabric.colors import red, green
print(red("This sentence is red, except for " + green("these words, which are green") + "."))

示例-Fabric部署flask应用

示例1:它可以把当前的源代码上传至服务器,并安装到一个预先存在 的 virtual 环境:

from fabric.api import *
# 使用远程命令的用户名
env.user = 'appuser'
# 执行命令的服务器
env.hosts = ['server1.example.com', 'server2.example.com']
def pack():
    # 创建一个新的分发源,格式为 tar 压缩包
    local('python setup.py sdist --fORMats=gztar', capture=False)
def deploy():
    # 定义分发版本的名称和版本号
    dist = local('python setup.py --fullname', capture=True).strip()
    # 把 tar 压缩包格式的源代码上传到服务器的临时文件夹
    put('dist/%s.tar.gz' % dist, '/tmp/yourapplication.tar.gz')
    # 创建一个用于解压缩的文件夹,并进入该文件夹
    run('mkdir /tmp/yourapplication')
    with cd('/tmp/yourapplication'):
        run('tar xzf /tmp/yourapplication.tar.gz')
        # 现在使用 virtual 环境的 Python 解释器来安装包
        run('/var/www/yourapplication/env/bin/python setup.py install')
    # 安装完成,删除文件夹
    run('rm -rf /tmp/yourapplication /tmp/yourapplication.tar.gz')
    # 最后 touch .wsgi 文件,让 mod_wsgi 触发应用重载
    run('touch /var/www/yourapplication.wsgi')

参考:<<Python自动化运维>>

--结束END--

本文标题: SSH连接与自动化部署工具parami

本文链接: https://lsjlt.com/news/193120.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SSH连接与自动化部署工具parami
    paramiko是基于Python实现的SSH2远程安全连接,支持认证及密钥方法。可以实现远程命令执行,文件传输,中间SSH代理等功能,相对于Pexpect,封装层次更高。 pip install Paramiko http://www...
    99+
    2023-01-31
    工具 SSH parami
  • python 自动化部署工具-fabri
    今天闲来无事,来介绍一下利用fabric 来部署代码包。 安装 pip install fabric fabric 默认引用fafile.py,指定执行文件加参数-f,如:fab -H 127.0.0.1 -f fabtest.py te...
    99+
    2023-01-31
    工具 python fabri
  • python 自动化部署工具Fabric
    自动化部署工具Fabric简介    Fabric就是一个帮助我们在上线时减少重复/繁琐操作的自动化部署利器,对于缺乏成熟运维平台的众多小公司的运维或开发人员来说,掌握这个工具是有必要的。1. Fabric是什么Fabric官方文档的描述如...
    99+
    2023-01-31
    工具 python Fabric
  • PHP CI/CD 与自动化部署中构建和部署工具的使用
    php ci/cd 中构建和部署工具的使用有助于提升开发和部署效率,主要使用以下工具:构建工具:docker(构建一致的环境)、composer(管理依赖项)部署工具:jenkins(功...
    99+
    2024-05-09
    构建工具 部署工具 docker composer apache
  • Linux中如何部署自动化运维工具ansible
    小编给大家分享一下Linux中如何部署自动化运维工具ansible,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ansible是新出现的自动化运维工具,基于Pyt...
    99+
    2023-06-27
  • Python自动化部署工具Fabric的简单上手指南
    Fabric 是基于 SSH 协议的 Python 工具,相比传统的 ssh/scp 方式,用 Python 的语法写管理命令更易读也更容易扩展,管理单台或者多台机器犹如本地操作一般。 官网地址:http:...
    99+
    2022-06-04
    上手 简单 工具
  • Ubuntu系统下如何安装自动化部署工具puppet
    本篇内容介绍了“Ubuntu系统下如何安装自动化部署工具puppet”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.设置主机文件在本教程里...
    99+
    2023-06-13
  • Alma Linux是否提供自动化部署和配置工具
    Alma Linux提供了一些自动化部署和配置工具,帮助用户轻松管理他们的系统。以下是一些常用的自动化部署和配置工具: Kicks...
    99+
    2024-04-02
  • Linux下自动化工具Parallel SSH的使用方法
    这篇文章将为大家详细讲解有关Linux下自动化工具Parallel SSH的使用方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。parallel-ssh 是为小规模自动化而设计的异步并行的...
    99+
    2023-06-15
  • Python自动化运维和部署项目工具Fabric使用实例
    Fabric 是使用 Python 开发的一个自动化运维和部署项目的一个好工具,可以通过 SSH 的方式与远程服务器进行自动化交互,例如将本地文件传到服务器,在服务器上执行shell 命令。 下面给出一个自...
    99+
    2022-06-04
    实例 工具 项目
  • PHP CI/CD 与自动化部署的自动化测试技巧
    自动化测试对于 php ci/cd 至关重要,通过以下技巧可以实现:使用 php 单元测试和 phpunit 编写测试用例。将 phpunit 测试用例集成到 ci/cd 管道中。配置自...
    99+
    2024-05-08
    php ci/cd composer
  • 如何使用Linux下自动化部署工具Puppet 的注册方式与常用命令
    本篇内容主要讲解“如何使用Linux下自动化部署工具Puppet 的注册方式与常用命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Linux下自动化部署工具Puppet 的注册方式与常...
    99+
    2023-06-13
  • PHP 数据库连接自动化:使用脚本和工具简化管理
    php 提供了自动化数据库连接的解决方案,包括:使用 pdo 连接到不同 dbms 并执行查询和修改;使用脚本定期执行维护任务,如清理和优化;使用 phpmyadmin、doctrine...
    99+
    2024-05-21
    数据库 php mysql oracle phpmyadmin
  • PHP CI/CD 与自动化部署流程详解
    php ci/cd 流程可自动化软件交付,提高效率和质量。具体步骤包括:安装 php ci/cd 工具(如 composer)、创建 laravel 项目、设置 git 仓库、配置 ci...
    99+
    2024-05-08
    ci/cd 自动化部署 laravel git composer
  • 轻量级自动化运维工具pssh与pslurp
    pssh项目...
    99+
    2023-06-05
  • PHP CI/CD 与自动化部署的最佳实践
    php ci/cd 最佳实践包括:自动化构建和测试实时监控和警报使用版本控制系统实战案例:使用 github actions 构建和部署通过遵循这些最佳实践,可以建立一个高效且可靠的 p...
    99+
    2024-05-08
    php ci/cd git composer
  • PHP CI/CD 与自动化部署的度量指标
    衡量 ci/cd 和自动化部署的指标包括:构建时间:应用程序构建和部署所需时间部署频率:应用程序在特定时间段内的部署次数部署失败率:部署失败的次数与总部署次数的比例变更失败率:导致故障或...
    99+
    2024-05-08
    php ci/cd
  • Linux自动化构建工具Makefile与make怎么用
    这篇文章主要介绍“Linux自动化构建工具Makefile与make怎么用”,在日常操作中,相信很多人在Linux自动化构建工具Makefile与make怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”L...
    99+
    2023-06-28
  • 如何利用k8s与gitlab来实现自动化部署
    随着互联网行业的日益发展,软件开发变得越来越复杂。如何快速、高效、可靠地完成软件部署成为了开发者们需要解决的重要问题。而自动化部署正是这样一种解决方案,对于加快软件上线速度、提高部署质量有着不可替代的作用。本文将介绍如何利用k8s与gitl...
    99+
    2023-10-22
  • 怎么利用k8s与gitlab来实现自动化部署
    这篇文章主要介绍了怎么利用k8s与gitlab来实现自动化部署的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么利用k8s与gitlab来实现自动化部署文章都会有所收获,下面我们一起来看看吧。一、什么是k8s?...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作