详细方法:

SSHClient中的方法 参数和参数说明
connect(实现ssh连接和校验)

hostname:目标主机地址

port:主机端口

username:校验的用户名

password:登录密码

pkey:私钥方式身份验证

key_filename:用于私钥身份验证的文件名

timeout:连接超时设置

allow_agent:这是布尔型,设置False的时候禁止使用ssh代理

look_for_keys:也是布尔型,禁止在.ssh下面找私钥文件

compress:设置压缩

exec_command(远程执行命令)

stdin,stdout,stderr:这三个分别是标准输入、输出、错误,用来获取命令执行结果,并不算方法的参数

command:执行命令的字符串,带双引号。

bufsize:文件缓冲大小,默认为1

load_system_host_keys(加载本地的公钥文件) filename:指定远程主机的公钥记录文件
set_missing_host_key_policy(远程主机没有密钥)

AutoAddPolicy:自动添加主机名和主机密钥到本地的HostKeys对象

RejectPolicy:自动拒绝未知的主机名和密钥(默认)

WarningPolicy:接受未知主机,但是会有警告

paramiko的核心组件SFTPClient类 实现远程文件的操作,比如上传、下载、权限、状态等。

SFTPClient类的方法 参数和参数说明
from_transport(使用一个已经通过已经连通的SFTP客户端通道)

localpath:本地文件的路径

remotepath:远程路径

callback:获取已接收的字节数和总传输的字节数

confirm:文件上传完毕后是否调用stat()方法,确定文件大小

get(从SFTP服务器上下载文件到本地)

remotepath:需下载的文件路径

localpath:保存本地的文件路径

callback:和put的一样

os方法

mkdir:简历目录

remove:删除

rename:重命名

stat:获取远程文件信息

listdir:获取指定目录列表

   
shell通道连接:invoke_shell的用法

invoke_shell(*args, **kwds)


Request an interactive shell session on this channel. If the server allows it, the channel will then be directly connected to the stdin, stdout, and stderr of the shell.


Normally you would call get_pty before this, in which case the shell will operate through the pty, and the channel will be connected to the stdin and stdout of the pty.


When the shell exits, the channel will be closed and can’t be reused. You must open a new channel if you wish to open another shell.


在这个通道请求一个交互式的shell会话,如果服务允许,这个通道将会直接连接标准输入、标准输入和错误的shell,通常我们会在使用它之前调用get_pty的用法,这样shell会话是通过伪终端处理的,并且会话连接标准输入和输出,当我们shell退出的时候,这个通道也会关闭,并且能再次使用,你必修重新开另一个shell。

Python 使用paramiko.Transport SSH方式登录路由器执行命令

import paramiko

t = paramiko.Transport(('x.x.x.x',22))   # 设置SSH连接的远程主机地址和端口
t.connect(username='xxx',password='xxx')   # 设置登陆用户名和密码等参数
chan=t.open_session()   # 连接成功后打开一个channel
chan.settimeout(15)     # 设置会话超时时间
chan.get_pty()          # 打开远程的terminal
chan.invoke_shell()     # 激活terminal
chan.send("display current-configuration\n")
chan.send(" "*60)
time.sleep(5)   # 如果程序执行的太快,没有等到返回足够的信息,chan.recv(65535)不能得到想要的结果
# 使用一些条件循环,判断什么时候读取返回结果,实际经常报错啊!
# str.chan.recv(65535)
# while not str.endswith('#'):
#     str=chan.recv(65535)    #recv_buffer=65535
f = open("D:\\t.txt","w")
f.write(chan.recv(65535).decode('ascii'))
f.close()
t.close()
---------------------
作者:m20
来源:CSDN
原文:https://blog.csdn.net/u010306071/article/details/79080697
版权声明:本文为博主原创文章,转载请附上博文链接!

 
连接linux服务器

import paramiko
ip = "192.168.55.55"
port = 22
username = 'root'
password = '23561314' # 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在known_hosts文件上的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=ip, port=22, username=username, password=password)
# 执行命令
print (u'连接%s成功' % ip)
stdin, stdout, stderr = ssh.exec_command('pwd;df') # # 获取结果
result = stdout.read() # # 获取错误提示(stdout、stderr只会输出其中一个)
# err = stderr.read()
# # 关闭连接
# ssh.close()
print(result)
# print(stdin, result, err)

SFTPClient上传下载:

基于用户名密码上传下载:

import paramiko

transport = paramiko.Transport(('hostname',22))
transport.connect(username='wupeiqi',password='123')

sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path')

transport.close()

基于公钥密钥上传下载:

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')

transport = paramiko.Transport(('hostname', 22))
transport.connect(username='wupeiqi', pkey=private_key )

sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path')

transport.close()

封装上传下载代码:

#coding:utf-8
import paramiko
import uuid

class SSHConnection(object):

def __init__(self, host='192.168.2.103', port=22, username='root',pwd='123456'):
self.host = host
self.port = port
self.username = username
self.pwd = pwd
self.__k = None

def connect(self):
transport = paramiko.Transport((self.host,self.port))
transport.connect(username=self.username,password=self.pwd)
self.__transport = transport

def close(self):
self.__transport.close()

def upload(self,local_path,target_path):
# 连接,上传
# file_name = self.create_file()
sftp = paramiko.SFTPClient.from_transport(self.__transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put(local_path, target_path)

def download(self,remote_path,local_path):
sftp = paramiko.SFTPClient.from_transport(self.__transport)
sftp.get(remote_path,local_path)

def cmd(self, command):
ssh = paramiko.SSHClient()
ssh._transport = self.__transport
# 执行命令
stdin, stdout, stderr = ssh.exec_command(command)
# 获取命令结果
result = stdout.read()
print (str(result,encoding='utf-8'))
return result

ssh = SSHConnection()
ssh.connect()
ssh.cmd("ls")
ssh.upload('s1.py','/tmp/ks77.py')
ssh.download('/tmp/test.py','kkkk',)
ssh.cmd("df")
ssh.close()


#!/usr/bin/env python

#encoding:utf8
 
import paramiko
 
hostname = '192.168.0.202'
port = 22
username = 'root'
password = 'password'
 
localpath = "D:\Develop\Python\paramiko/\\test_file.txt"  #需要上传的文件(源)
remotepath = "/data/tmp/test_file.txt"      #远程路径(目标)
 
try:
              # 创建一个已经连通的SFTP客户端通道
              t = paramiko.Transport((hostname, port))
              t.connect(username=username, password=password)
              sftp = paramiko.SFTPClient.from_transport(t)
              
              # 上传本地文件到规程SFTP服务端
              sftp.put(localpath,remotepath) #上传文件
              
              # 下载文件
              sftp.get(remotepath,'D:\Develop\Python\paramiko/\\test_down.txt')
              
              # 创建目录
              # sftp.mkdir('/data/tmp/userdir', 0755)
              
              # 删除目录
              # sftp.rmdir('/data/tmp/userdir')
              
              # 文件重命名
              #sftp.rename(remotepath,'/data/tmp/new_file.txt')
              
              # 打印文件信息
              print sftp.stat(remotepath)
              
              # 打印目录信息
              print sftp.listdir('/data/tmp/')
              
              # 关闭连接
              t.close()
              
except Exception, e:
              print str(e)

部分信息转载于https://www.cnblogs.com/zhang-yulong/p/6540457.html

参考资料:https://www.cnblogs.com/qianyuliang/p/6433250.html

https://blog.csdn.net/Sufeiboy/article/details/82078059

ssh远程连接linux服务器并执行命令的更多相关文章

  1. Java远程连接Linux服务器并执行命令及上传文件

    最近再开发中遇到需要将文件上传到Linux服务器上,至此整理代码笔记. 此种连接方法中有考虑到并发问题,在进行创建FTP连接的时候将每一个连接对象存放至 ThreadLocal<Ftp> ...

  2. Mac 上ssh远程连接Linux服务器提示Host key verification failed.

    当我们对重装远程服务器的时候会出现Host key verification failed问题 解决办法: rm -rf ~/.ssh/known_hosts 重新ssh连接,OK!

  3. 虚拟机VMware网络类型&&SSH远程连接Linux

    前言: Linux专题是16年11月开始写,说来惭愧,已经5个月没学Linux,至今感觉连入门还没达到.暑假实习有投运维开发岗位,无奈对Linux不熟悉,校招简历也被刷了.so, 我打算先花1个月内的 ...

  4. widows本地-xshell实现远程连接linux服务器图形界面

    本地环境远程连接linux图形界面,常用的实现工具有,VNC.Puty.Xshell等,这里我们用的xshell manager: Xmanager简介:Xmanager是一个运行于 Windows平 ...

  5. widows终端远程连接Linux服务器

    一.前言 为什么不是远程连接Linux服务器? 因为我不会,远程连接window我就用电脑自带的“远程桌面连接”. 以下所述都是在CentOS操作系统下的. 服务器刚换成Linux的时候很迷茫,感觉无 ...

  6. iTerm 2打造ssh完美连接Linux服务器快捷方法

    iTerm 2打造ssh完美连接Linux服务器快捷方法 2019年05月02日 10:40:19 Mars0908 阅读数 213更多 个人分类: Mac下开发   版权声明:本文为博主原创文章,遵 ...

  7. vscode远程连接linux服务器,可视化绘图

    vscode远程连接linux服务器 想要实现的功能和解决方案 实现的功能: windows下直接使用远程linux服务器的python环境和文件来编写和运行py文件, 实时的编写py文件,和可视化绘 ...

  8. [方法] Windows 下SSH远程连接Linux

    考虑到Linux服务器自带SSH服务,并且SSH服务开机启动. 因此,方法如下: 安装putty 输入Linux服务器IP地址 此外,如果想远程重启Linux服务器,在命令行中输入reboot即可.

  9. Sublime 远程连接 Linux服务器

    Sublime是一款强大的编辑器,它的强大体现在它强大的插件. 要实现Sublime 远程连接 Linux服务器,需要使用插件SFTP. 一. 插件安装 用Package Control安装插件按下C ...

随机推荐

  1. jumpserver部署1.0版本

    A. jumpserver概述 跳板机概述: 跳板机就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作: 跳板机缺点:没有实现对运维人员操作行为的 ...

  2. 一个不错的vue项目

    项目演示: https://www.xiaohuochai.cc 项目地址:https://github.com/littlematch0123/blog-client

  3. SQL结果统计 GROUP BY

    在结果几种,使用GROUP BY进行相同项求和的时候SELECT的字段要与GROUP BY后面的一一对应. select M.TIME,M.PRODUCTMODEL,M.PROCESS_PRODUCT ...

  4. SQL limit(分页)

    1.limit使用 limit参数,第一个参数:从哪儿开始查:第二个参数:查几条 i : 为查询结果的索引值(默认从0开始): n : 为查询结果返回的数量  -- 从3开始 取 3 条 SELECT ...

  5. 消息队列之--Kafak

    序言 消息丢失如何解决? 解耦 异步 并行 Docker安装Kafak 1.下载镜像 # zookeeper镜像 docker pull wurstmeister/zookeeper # kafka镜 ...

  6. (77)一文了解Redis

    为什么我们做分布式使用Redis? 绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知.这里对  ...

  7. CCPC哈尔滨E题

    一堆序列拼接起来,找出现次数大于n/2的数 假设一个数出现次数大于n/2 那么它减去其他数出现的次数一定非负: = c) { cnt += t[i]; } } } } //cout<<c& ...

  8. [BZOJ1718]:[Usaco2006 Jan] Redundant Paths 分离的路径(塔尖)

    题目传送门 题目描述 为了从F个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条相互分 ...

  9. 聊聊spring-boot-starter-data-redis的配置变更

    本文主要研究一下spring-boot-starter-data-redis的配置变更 配置变更 以前是spring-boot的1.4.x版本的(spring-data-redis为1.7.x版本), ...

  10. python之新式类与经典类

    经典类与新式类 经典类:P 或 P()--深度查找,向上查父节点 新式类 :P(object)---广度查找,继承object,新式类的方法较多