paramiko是一个基于SSH用于连接远程服务器并执行相关操作(SSHClient和SFTPClinet,即一个是远程连接,一个是上传下载服务),使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来实现的。
Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令、文件传输等功能。
默认Python没有自带,需要手动安装:pip install paramiko。如果安装失败,可以尝试yum安装:yum install python-paramiko。
除了Paramiko模块,还有相同作用的fabric和pexpect模块。

SSH客户端实现方案一,远程执行命令(密码认证)

# -*- coding:utf-8 -*-
import paramiko # 先安装pycrypto,再安装paramiko # 创建SSH对象
ssh = paramiko.SSHClient() # 允许连接不在~/.ssh/known_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器
ssh.connect(hostname="106.15.88.182", port=22, username="root", password="123456") # 执行命令,不要执行top之类的在不停的刷新的命令(可以执行多条命令,以分号来分隔多条命令)
# stdin, stdout, stderr = ssh.exec_command("cd %s;mkdir %s" % ("/www/wwwroot", "aa"))
stdin, stdout, stderr = ssh.exec_command("python /www/wwwroot/test.py")
stdin.write("终端等待输入...\n") # test.py文件有input()函数,如果不需要与终端交互,则不写这两行
stdin.flush() # 获取命令结果
res, err = stdout.read(), stderr.read()
result = res if res else err
res = result.decode()
res = result.decode("utf-8")
res = result.decode(encoding="utf-8")
print res # 关闭服务器连接
ssh.close()

SSH客户端实现方案二,远程执行命令(密码认证)

import paramiko

transport = paramiko.Transport(("106.15.88.182", 22))
transport.connect(username="root", password="123456") # 建立连接
# transport.connect(username="root", password="口令", hostkey="密钥") # 创建SSH对象,SSHClient是定义怎么传输命令、怎么交互文件
ssh = paramiko.SSHClient()
ssh._transport = transport # 执行命令,不要执行top之类的在不停的刷新的命令
stdin, stdout, stderr = ssh.exec_command("df") # 获取命令结果
res, err = stdout.read(), stderr.read()
result = res if res else err
print result.decode() # 关闭服务器连接
transport.close()

SSH客户端实现方案三,远程执行命令(密码认证)

import paramiko

client = paramiko.SSHClient()   # 创建SSH对象
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 允许连接不在known_hosts文件中的主机 # 连接服务器,以用户名和密码进行认证
client.connect(hostname="106.15.88.182", port=22, username="root", password="123456") #实例化Transport,并建立会话Session
ssh_session = client.get_transport().open_session()
if ssh_session.active:
ssh_session.exec_command("df")
print ssh_session.recv(1024) # 关闭服务器连接
client.close()

SSH客户端实现方案四,远程执行命令(密钥认证)

import paramiko

ssh = paramiko.SSHClient()     # 创建SSH对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机 #这里写我们的密钥文件
private_key = paramiko.RSAKey.from_private_key_file("key.poem")
# 连接服务器,这里我们用pkey参数设置为私钥登陆
ssh.connect(hostname="106.15.88.182", port=22, username="root", pkey=private_key) stdin, stdout, stderr = ssh.exec_command('df') # 执行命令
res, err = stdout.read(), stderr.read() # stdout.readline()
result = res if res else err
print result.decode() ssh.close() # 关闭连接

封装之后的使用

import sys,logging
from paramiko.client import SSHClient, AutoAddPolicy
from paramiko import AuthenticationException
from paramiko.ssh_exception import NoValidConnectionsError class SshClient():
def __init__(self):
self.ssh_client = SSHClient() def ssh_login(self, host_ip, username, password):
try:
# 设置允许连接known_hosts文件中的主机(默认连接不在known_hosts文件中的主机会拒绝连接抛出SSHException)
self.ssh_client.set_missing_host_key_policy(AutoAddPolicy())
self.ssh_client.connect(host_ip, port=22, username=username, password=password)
except AuthenticationException:
logging.warning('username or password error')
return 1001
except NoValidConnectionsError:
logging.warning('connect time out')
return 1002
except:
print("Unexpected error:", sys.exc_info()[0])
return 1003
return 1000 def execute_some_command(self, command):
stdin, stdout, stderr = self.ssh_client.exec_command(command)
print stdout.read().decode() def ssh_logout(self):
self.ssh_client.close() if __name__ == "__main__":
command = "whoami" # 自己使用ssh时,命令怎么敲的command参数就怎么写
ssh = SshClient()
if ssh.ssh_login(host_ip="106.15.88.188", username="root", password="abc0506") == 1000:
ssh.execute_some_command(command)
ssh.ssh_logout()

https://www.cnblogs.com/breezey/p/6663546.html

https://blog.csdn.net/cc297322716/article/details/78608283

https://www.jb51.net/article/125681.htm

Python—实现ssh客户端(连接远程服务器)的更多相关文章

  1. paramiko模块(基于SSH用于连接远程服务器)

    paramiko模块,基于SSH用于连接远程服务器并执行相关操作 class SSHConnection(object): def __init__(self, host_dict): self.ho ...

  2. Mac下ssh连接远程服务器时自动断开问题

    在mac下使用securecrt通过ssh连接远程服务器时,总会一段时间没有动作后,ssh被自动断开.在windows下用xmanager貌似没有遇到过这个问题. 在网上找了解决方法如下: 客户端配置 ...

  3. Mac使用SSH连接远程服务器

    1. 终端通过 ssh 连接远程服务器 ssh -p 36622 root@localhost 2. 文件上传下载 上传 scp 下载 scp 3. 客户端 FinalShell(推荐) FileZi ...

  4. ssh免密连接远程服务器

    ssh免密连接远程服务器 借助ssky-keygen和ssh-copy-id工具,通过4个简单的步骤实现无需输入密码登录远程Linux主机 1 生成密钥 通过内置的工具生成RSA算法加密的密钥 ssh ...

  5. [转]学习win10的bash使用ssh连接远程服务器

    1. 前言 微软已经在Win10一周年更新预览版中加入了Ubuntu Bash命令支持,相当于一个小型的linux系统,本来连接远程服务器的话,要使用putty啥的,现在可以用这个直接连接,我来讲讲步 ...

  6. windows连接远程服务器报错'SSH' 不是内部或外部命令,也不是可运行的程序 或批处理文件 解决方案

    网上在windows下连接远程服务器的步骤如下: 1.打开cmd命令行窗口 2.输入cd ~/.ssh,进入c盘下的.ssh文件 3.输入“ssh root@远程服务器的ip地址”连接远程服务器, b ...

  7. VsCode通过SSH连接远程服务器开发

    前言 nil 正文 安装插件 安装VsCode官方插件 Remote - SSH Remote - SSH: Editing Configuration Files WSL(远程桌面连接需要Remot ...

  8. 使用WinScp连接远程服务器和传输文件

    早在3月份,我就使用到了WinScp,WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议. 它的主要功能就是在本地与远程计算机间安全的复制文件..WinSc ...

  9. Pycharm连接远程服务器并进行代码上传+远程调试

    前提:需要有一个远程服务器,知道他的ip.port.user.password 一.连接远程服务器 进入配置页面 Pycharm菜单栏,如下图所示,依次点击 Tools -> Deploymen ...

随机推荐

  1. Vue的MVVM框架理解

    图示 只上图,请不要怪楼主懒. 这是楼主梳理后画的,因为毕竟自己画的印象深刻,更觉得香啊. 黄线: 表示View->Model, 红线: 表示Model->View 具体代码,请查看Vue ...

  2. android binder 进程间通信机制4-Service Manager

    Service Manager 是Binder进程间通信的核心组件之一: 它扮演者Binder进程间通信上下文(Context Manager)的角色 负责管理系统中的Service组件 向Clien ...

  3. IDEA如何打包可运行jar,外部引用jar包版

    背景: 有时候,我们会用IDEA来开发一些小工具,需要打成可运行的JAR包:或者某些项目不是WEB应用,纯粹是后台应用,发布时,也需要打成可运行的JAR包.并且,如果依赖第三方jar时,又不希望第三方 ...

  4. 浅谈python之利用pandas和openpyxl读取excel数据

    在自学到接口自动化测试时, 发现要从excel中读取测试用例的数据, 假如我的数据是这样的: 最好是每行数据对应着一条测试用例, 为方便取值, 我选择使用pandas库, 先安装 pip instal ...

  5. __format__

    目录 一.__format__ 一.__format__ 自定制格式化字符串 date_dic = { 'ymd': '{0.year}:{0.month}:{0.day}', 'dmy': '{0. ...

  6. Nacos集群搭建过程详解

    Nacos的单节点,也就是我们最开始使用的standalone模式,配置的数据是默认存储到内嵌的数据库derby中. 如果我们要搭建集群的话,那么肯定是不能用内嵌的数据库,不然数据无法共享.集群搭建的 ...

  7. vscode源码分析【九】窗口里的主要元素

    第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 第三篇:vscode源码分析[三]程序的启动逻辑,性能问题的追踪 ...

  8. React: React脚手架

    一.简言 React开发目前已经非常流行,对于如何实现对React项目的管理和维护,React生态圈出现了大量可用的开发工具,例如Browserify.Gulp.Grunt.webpack等.其中,w ...

  9. 【STM32H7教程】第27章 STM32H7的TCM,SRAM等五块内存的动态内存分配实现

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第27章       STM32H7的TCM,SRAM等五块内 ...

  10. IT兄弟连 HTML5教程 HTML5的学习线路图 第二、三阶段

    第二阶段编写用户交互功能 通过第一阶段的学习虽说可以完成页面制作,但并不完美,不能算是合格的前端工程师,所以要继续学习如图1.13中的第二阶段内容.现在的Web页面都融入了大量的特效,并且多数需要与用 ...