python工具编写之paramiko实现SSH远程连接

客户端实现有三种方式:

1:用账号密码登陆

1.1直接使用SSHClient对象的exec_command()在服务端执行命令:

代码实现:

import paramiko
import sys

def Usage():
    print "[Usage]./SSH_Client.py ip port command"

try:
    ip=sys.argv[1]
    port=int(sys.argv[2])
    command=sys.argv[3]
except:
    Usage()

user="root"
passwd="root"
#实例化SSHClient
client=paramiko.SSHClient()
#自动添加策略,保存服务器的主机名和密钥信息
#用ssh连接远程主机时,第一次连接时会提示是否继续进行远程连接,选择yes 这句话会自动选择yes
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接SSH服务端,以用户名和密码进行认证
client.connect(ip,port,username=user,password=passwd)
#打开一个Channel 并执行命令
stdin,stdout,stderr=client.exec_command(command)
#打印执行结果 若有错误 stderr.read()就不为空
if stderr.read()=="":
    for i in stdout.readlines():
        print i
client.close()

1.2实例化SSHClient的对象再得到一个Transport对象,以Transport对象的exec_command()在服务端执行命令

import sys
import paramiko

def Usage():
    print "[Usage]./SSH_Client.py ip port command"

try:
    ip=sys.argv[1]
    port=int(sys.argv[2])
    command=sys.argv[3]
except:
    Usage()

# reload(sys)
# sys.setdefaultencoding(‘utf-8‘)    
user="root"
passwd="root"
#实例化SSHClient
client=paramiko.SSHClient()
#自动添加策略,保存服务器的主机名和密钥信息
#用ssh连接远程主机时,第一次连接时会提示是否继续进行远程连接,选择yes 这句话会自动选择yes
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接SSH服务端,以用户名和密码进行认证
client.connect(ip,port,username=user,password=passwd)
#实例化Transport 建立session会话
ssh_session=client.get_transport().open_session()
if ssh_session.active:
    ssh_session.exec_command(command)
    print ssh_session.recv(4096)
client.close()

2:用密钥进行登陆

import paramiko
import sys

def Usage():
    print "[Usage]./SSH_Client.py ip port command"

try:
    ip=sys.argv[1]
    port=int(sys.argv[2])
    command=sys.argv[3]
except:
    Usage()

user="root"

#实例化SSHClient
client=paramiko.SSHClient()
#指定用来解密的私钥的路径,需要手动生成
pkey_file = ‘/home/.ssh/id_rsa‘   
#使用私钥解密
key = paramiko.RSAKey.from_private_key_file(pkey_file)    
#load_system_host_keys用于指定对方主机存放本机公钥的位置,默认不加参数的话是将这个位置设置为~/.ssh/known_hosts
client.load_system_host_keys()
#自动添加策略,保存服务器的主机名和密钥信息
#用ssh连接远程主机时,第一次连接时会提示是否继续进行远程连接,选择yes 这句话会自动选择yes
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接SSH服务端,以用户名和密码进行认证
client.connect(ip,port,username=user,key_filename=key,timeout=6)
#打开一个Channel 并执行命令
stdin,stdout,stderr=client.exec_comment(command)
#打印执行结果 若有错误 stderr.read()就不为空
if stderr.read()=="":
    print stdout.readlines()
client.close()

实现上传下载:

import paramiko
#获取Transport实例  参数为tuple
tran = paramiko.Transport(("192.168.72.130",22))
#连接SSH服务端
tran.connect(username ="root", password ="root")
#获取SFTP实例
sftp = paramiko.SFTPClient.from_transport(tran)
#设置上传的本地/远程文件路径
#执行上传动作
sftp.put("C:/7.der","/tmp/7.der")
sftp.get(‘/root/test.py‘,‘F:/test.py‘)
tran.close()

实现过程中出现的问题:

import paramiko时出现UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe9 in position 0: ordinal not in range(128)错误

解决办法:在python 安装路径下Lib\site.py 添加如下代码:

import sys

reload(sys)

sys.setdefaultencoding(‘gbk‘)

经过测试 设置编码为utf-8还是导入不成功 设置为gbk可以成功导入

登陆所要的密钥需要手动生成:可以参考

http://blog.sina.com.cn/s/blog_7ae2408501018xsj.html

http://blog.csdn.net/fdipzone/article/details/47327183

时间: 2024-08-06 15:21:15

python工具编写之paramiko实现SSH远程连接的相关文章

Windows和linux虚拟机之间联网实现SSH远程连接以及VMware的3种网络模式[NAT、桥接和Host-only]

Windows和linux虚拟机之间联网实现SSH远程连接以及VMware的3种网络模式[NAT.桥接和Host-only] 作者:天齐 一.Windows和linux虚拟机之间联网实现SSH远程连接 假如我们要给主机名为mini1的虚拟机配置ip地址,需要以下几个步骤: 在linux上查看ip地址,如果linux服务器有ip地址,让它的ip地址和windows的ip地址在同一个网段,它们之间才能联网.在linux上查看ip地址的命令为"ifconfig": 发现eth0网卡没有配置i

SSH 远程连接原理及故障排错详解

1.SSH 远程连接介绍 最常用的 Linux 提供远程连接服务的工具就是 SSH 软件,SSH 分为 SSH 客户端和 SSH 服务端两部分.其中,SSH服务端包含的软件程序主要有 openssl 和 openssh,在 Linux 系统中可以按如下方法查询 SSH 服务端工具的安装情况. # rpm -qa openssl openssh 其中,openssh 是提供 SSH 服务的程序,openssl 是为 SSH 提供连接加密的程序. 2.SSH 服务端介绍 启动 Linux 系统时,默

ssh远程连接介绍

一.ssh介绍 1.ssh客户端 SecureCRT.xshell.putty.Linux下的SSH客户端软件 2.ssh服务器端  openssh(ssh服务程序) 和 openssl(提供连接加密的程序) sshd 守护进程 二.查询服务器端工具安装情况: rpm -qa openssh openssl 三.ssh远程连接故障排查: 1.ping  serverIP 2.traceroute  serverIP  -n (linux系统) tracert  -d  serverIP     

SSH远程连接与加密技术

一.数据加密的分类 数据加密算法通常可以分为三类:对称加密:非对称加密:单向加密.先对它们的区别与作用作说明 1.对称加密算法 所谓对称加密算法就是加密和解密使用同一个密钥.其基本算法有DES.3DES.AES等.特性:加密.解密使用同一个密钥:将原始数据分割成固定大小的块,逐个进行加密.缺陷:密钥过多:密钥分发. 2.非对称加密 密钥是成对出现.实现算法有RSA, DSA, ELGama等.公钥(pubkey):公开给所有人:私钥(secret key):自己留存,必须保证其私密性.特点:用公

全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)

注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 Mac 新用户,如何在 Mac OS X 系统上配置开发与上网环境,另有<全新 Mac 安装指南(通用篇)>作为本安装指南的基础篇. 在 <为什么说每个程序员都应该有台Mac电脑>一文中我有提到 Mac 系统的命令行环境与 Linux 系统十分类似,这是因为 Mac OS X 的操作系统内核是 Darwin,它和 Linux 一样是一种优秀的类 Unix 系统.掌握 Linux Shell 命令行的使用,

虚拟机VMware网络类型&amp;&amp;SSH远程连接Linux

前言: Linux专题是16年11月开始写,说来惭愧,已经5个月没学Linux,至今感觉连入门还没达到.暑假实习有投运维开发岗位,无奈对Linux不熟悉,校招简历也被刷了.so, 我打算先花1个月内的时间入下门.前几天还专门去当当网买了一本<跟老男孩学Linux运维-Web集群实战>.lenrning begin!! 一.虚拟机网络类型 为虚拟机选择网络类型是极其关键的.VMware虚拟机常见的网络类型有Bridged(桥接).NAT.Host-only(仅主机)3种.在创建Linux虚拟机时

Linux SSH端口更改和SSH远程连接服务慢原因排查

Linux SSH端口更改和优化 为什么需要更改SSH默认连接端口 Windows服务器的默认远程管理端口是3389,Linux服务器的默认端口是22.如果在公网上,经常会被工具扫,这是不安全的,为了系统安全,需要更改默认的配置. Linux 6 操作过程 更改配置文件 # cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori 更改配置前备份 # vi /etc/ssh/sshd_config 编辑sshd_config ####添加如下内容####

SSH远程连接连接其他主机,等待时间过长的原因。

ssh远程连接登录到其他主机,输入登录用户名,等待时间很长时间,然后才出现输入密码的提示.导致这样时间过长,太慢了的原因有两个.(1)当使用ssh远程登录到某个IP时,这个IP的主机系统会读取/etc/ssh/sshd_config配置,在这里文件里面有一项"UseDNS yes",而这项虽然是用"#"注释的,但是默认情况下,他就是启动的,这句话的意思是允许系统根据/etc/resolve.conf域名服务去反解析这IP,反查找IP要花费一定时间,如果DNS服务器里

mac 通过 终端 ssh 远程连接 centos 服务器

mac 通过 终端 ssh 远程连接 centos 服务器 在终端下输入 ssh -l root 204.74.*.*      就可以连接了,这是端口没变的情况,还是原来的22 ssh -p 448(你改变的端口) -l root(连接用户名) 204.74.*.*      这个是端口改变后的连接 ssh 连接的时候 Host key verification failed. ssh ssh 连接的时候 Host key verification failed. 解决方法:vi ~/.ssh