paramiko:实现ssh协议,对linux服务器资源的访问

介绍

网络传输是遵循协议的,比如SSH,paramiko则是实现了SSHv2协议的一个python库(底层使用的是cryptography)。有了paramiko之后,我们便可以通过python使用ssh协议来连接远程服务器执行操作,不用再通过xshell等工具。安装也很简单,直接pip install paramiko即可

paramiko包含两大核心组件:SSHClient和SFTPClient

  • SSHClient的作用类似于Linux下的ssh命令,是对SSH会话的封装,该类封装了传输(transport),通道(channel)及SFTPClient建立的方法(open_sftp)等等、通常用于执行远程命令

    transport:是一种加密的会话,使用时会同步创建了一个加密的Tunnels(通道),这个Tunnels叫做Channel
    channel:是一种类Socket,一种安全的SSH传输通道
    session:是client与Server保持连接的对象,用connect()/start_client()/start_server()开始会话
  • SFTPClient的作用类似于Linux下的sftp命令,是对SFTP客户端的封装,用于实现远程文件操作,如:文件上传、下载、修改文件权限等操作

SSHClient的使用

一般都会先创建一个客户端实例,client = paramiko.SSHClient(),然后这个client下有很多方法

  • connect():实现远程服务器的连接与认证

    def connect(
        self,
        hostname,
        port=SSH_PORT,
        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,
        auth_timeout=None,
        gss_trust_dns=True,
        passphrase=None,
    ):
    常用参数:
    hostname:连接的目的主机,这个参数是必须的
    port=SSH_PORT:指定端口,默认是22
    username=None:验证的用户名
    password=None:验证的用户密码
    pkey=None:私钥方式用于身份验证
    key_filename=None:一个文件名或者文件列表,指定私钥文件
    timeout=None:可选的tcp连接超时时间
    allow_agent=True:是否允许连接到ssh代理,默认为True
    look_for_keys=True 是否在~/.ssh中搜索私钥文件,默认为True 允许
    compress=False, 是否打开压缩
  • set_missing_host_key_policy():设置远程服务器没有在know_hosts文件中记录时的应对策略。目前支持三种策略:
    设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种:
    
    AutoAddPolicy 自动添加主机名及主机密钥到本地HostKeys对象,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认
    WarningPolicy 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接
    RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项
  • exec_command():在远程服务器执行Linux命令的方法。
  • open_sftp():在当前ssh会话的基础上创建一个sftp会话。该方法会返回一个SFTPClient对象。
    # 利用SSHClient对象的open_sftp()方法,可以直接返回一个基于当前连接的sftp对象,可以进行文件的上传等操作.
    
    sftp = client.open_sftp()
    sftp.put('1.txt','2.txt')
import paramiko

# 实例化SSHClient
client = paramiko.SSHClient()

# 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接SSH服务端,以用户名和密码进行认证
client.connect(hostname='47.94.174.89', port=22, username='root', password='zgdasdas223')

# 打开一个Channel并执行命令
stdin, stdout, stderr = client.exec_command('ls / ')  # stdout 为正确输出,stderr为错误输出,同时是有1个变量有值

# 打印执行结果
print(stdout.read().decode('utf-8'))
"""
bin
boot
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
"""

# 关闭SSHClient
client.close()
import paramiko

# 实例化SSHClient
client = paramiko.SSHClient()

# 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接SSH服务端,以用户名和密码进行认证
client.connect(hostname='47.94.174.89', port=22, username='root', password='zggdsadsa13')

# 打开一个Channel并执行命令
stdin, stdout, stderr = client.exec_command('dsadasdasdas ')  # stdout 为正确输出,stderr为错误输出,同时是有1个变量有值

# 打印执行结果
print(stderr.read().decode('utf-8'))
"""
bash: dsadasdasdas: command not found
"""

# 关闭SSHClient
client.close()


SFTPClient的使用

SFTPCLient作为一个sftp的客户端对象,根据ssh传输协议的sftp会话,实现远程文件操作,如上传、下载、权限、状态

from_transport(cls,t) 创建一个已连通的SFTP客户端通道
put(localpath, remotepath, callback=None, confirm=True) 将本地文件上传到服务器 参数confirm:是否调用stat()方法检查文件状态,返回ls -l的结果
get(remotepath, localpath, callback=None) 从服务器下载文件到本地
mkdir() 在服务器上创建目录
remove() 在服务器上删除目录
rename() 在服务器上重命名目录
stat() 查看服务器文件状态
listdir() 列出服务器目录下的文件
import paramiko

# 获取transport实例
transport = paramiko.Transport(("47.94.174.89", 22))

# 连接ssh,通过username和password
transport.connect(username="root", password="dasdsadas3")

# 获取SFTP实例
sftp = paramiko.SFTPClient.from_transport(transport)

# 执行下载文件
sftp.get("/root/dockerfile", "dockerfile")

# 执行上传文件
sftp.put("1.py", "/root/11.py")

transport.close()

原文地址:https://www.cnblogs.com/traditional/p/11142268.html

时间: 2024-07-30 07:16:07

paramiko:实现ssh协议,对linux服务器资源的访问的相关文章

如何在Windows系统上利用Telnet协议连接Linux服务器

Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力.很多终端使用者都习惯在计算机上利用Telnet会话来远程控制服务器.这里小编就分两步为大家演示如何在Windows系统上利用Telnet协议连接Linux服务器. 步骤一:在Windows系统上打开Telnet功能:  步骤二:在Linux系统上启用Telnet服务. 步骤一:Windows终端开启Telnet功能 1/由于在Windows Vista之后的版本默认并没有提供Telnet

python paramiko模块SSH自动登录linux系统进行操作

1). Linux系统首先要开启SSH服务:service ssh status 如果没安装的话,则要:apt-get install openssh-server service ssh restart 2). pip install paramiko example 1: import paramikossh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect('

Windows下通过SSH无密码连接Linux服务器

一.配置环境 1.本机系统:Windows 10 Pro(64位) 2.服务器:腾讯云CentOS 7.2(64位) 3.SSH连接软件:Xshell 5 二.配置SSH无密码登录步骤 1.在个人PC机产生公钥和私钥 2.将产生的公钥上传到服务器,将公钥导入到认证文件,更改权限 3.通过Xshell 5 导入私钥,进行SSH连接 三.前期准备 1.新创建的Linux服务器有用户名和密码,可以通过用户名和密码连接,打开Xshell 5点击新建按钮 2.新建一个连接 3.输入服务器的用户名和密码,先

ssh远程连接linux服务器并执行命令

详细方法: SSHClient中的方法 参数和参数说明 connect(实现ssh连接和校验) hostname:目标主机地址 port:主机端口 username:校验的用户名 password:登录密码 pkey:私钥方式身份验证 key_filename:用于私钥身份验证的文件名 timeout:连接超时设置 allow_agent:这是布尔型,设置False的时候禁止使用ssh代理 look_for_keys:也是布尔型,禁止在.ssh下面找私钥文件 compress:设置压缩 exec

在windows上通过ssh远程链接linux服务器[转]

本文分别转自 [http://jingyan.baidu.com/article/6d704a130de40e28db51cab5.html] [http://www.cnblogs.com/mliudong/p/4094519.html] 今天想要新装了一台linux服务器,想要将其搬到机房,同时也要实现通过别的电脑对该服务器的访问,通过windows上装的ssh访问linux服务器,发现链接不上,通过百度发现linux服务器上要装ssh-server,所以百度了安装教程(http://jin

如何保持SSH连接的linux服务器不断线

windows系统 使用SecureCRT连接远程服务器,在会话选项 -> 终端设置中勾选"发送协议 NO-OP". 使用putty连接远程服务器,找到Connection -> Seconds between keepalives ( 0 to turn off ), 默认为0,改为60. Linux系统 在linux系统中使用ssh连接远程服务器时,可以使用-o的一个参数ServerAliveInterval来设置防止超时的时间. 比如:ssh -o serverali

JMeter监控Linux服务器资源案例

JMeter是一款压力测试工具,我们也可以用它来监控服务器资源使用情况.JMeter正常自带可以通过Tomcat的/manager/status来监控服务资源使用情况.这种情况只能监控Tomcat支持的资源使用部分. 本文主要来说一下如何通过JMeter插件来监控服务器CPU.内存.磁盘.网络等相关资源.JMeter 插件网址:http://jmeter-plugins.org/Perf Mon 插件 http://jmeter-plugins.org/wiki/PerfMon/ 1 服务本身:

Mac下用SSH连接远程Linux服务器

打开终端 输入连接服务器命令:ssh  用户名@服务器IP,输入密码. ssh [email protected] 然后输入密码即可 退出 control+d 原文地址:https://www.cnblogs.com/loaderman/p/11655589.html

ssh远程登录linux服务器

用法: ssh -l user -p port server_ip 或者 ssh -p port [email protected]_ip 参数: -l 后接要登录的远程系统用户名 -p 后接远程系统上开放的ssh端口 #加粗字是必须的参数 *.基本登录够用,有时间了详细了解一下