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. dedecmsV5.7 调用其他站点的数据库的数据的方法

    问题:网站是用dedecmsv5.7写的,后来加了一套论坛discuzX3.4.因为dede要调用dz的数据,本来用jsonp跨域请求的数据,但是m端掉用的时候会把请求的链接的域名后面自动加个/m(不 ...

  2. s3c2440裸机-UART编程(一、UART硬件介绍及传输原理)

    1.uart硬件介绍 UART的全称是Universal Asynchronous Receiver and Transmitter(异步收发器). uart主要用于: 1.打印调试 2.数据传输 串 ...

  3. go语言设计模式之memento

    memento.go package memento import ( "fmt" ) type State struct { Description string } type ...

  4. CF785D Anton and School - 2

    题目链接 problem 给出一个括号序列,要求删除一些括号使得剩下的括号序列是个匹配的括号序列,且改括号序列左边全部为左括号,右边全部为右括号. solution 考虑枚举左右括号交界的位置\(x\ ...

  5. Golang 入门 : channel(通道)

    笔者在<Golang 入门 : 竞争条件>一文中介绍了 Golang 并发编程中需要面对的竞争条件.本文我们就介绍如何使用 Golang 提供的 channel(通道) 消除竞争条件. C ...

  6. JavaScript:了解一下函数式编程

    一.简介 在JavaScript中,函数就是第一类公民,它可以像字符串.数字等变量一样,使用var修饰并作为数据使用.它可以作为数值.可以作为参数.还可以作为返回结果.可以说JavaScript就是函 ...

  7. 使用Runtime的objc_msgSend实现模型和字典的互转

    一.介绍 模型转字典,字典转模型,这是开发中最基本的功能.系统类中提供了一个setValuesForKeysWithDictionary方法来实现字典转模型,至于模型转字典,这个就需要使用runtim ...

  8. 一个python问题引发的思考

    问题: pyqt5下开发的时候,遇到了一个这样的问题.Traceback (most recent call last):File “test.py”, line 3, in from PyQt5.Q ...

  9. HTTP常见的几种认证机制

    几种常用的认证机制 ===================转自https://www.cnblogs.com/xiekeli/红心李的文章====================== 我是一个测试人员 ...

  10. VMWare 虚拟机启动报“内部错误”的解决办法

    情况 启动虚拟机的时候,启动不起来,弹出对话框,内部错误. 原因 Vmware 的 server 服务未开启. 解决办法 将以上服务都启动起来