使用python实现一个ssh客户端

如何使用python 实现 一个ssh客户端,可以发送一连串的命令,而不是发一个命令?

使用 paramiko 模块。如果没有,安装一个。

pip install paramiko

上一个可以用的代码。

#-*-coding:GBK -*- 
import os
import sys
import paramiko
import time
import select


class sshClient:
	#创建一个ssh客户端,和服务器连接上,准备发消息
	def __init__(self,host,port,user,password):
		self.trans = paramiko.Transport((host, port));
		self.trans.start_client();
		self.trans.auth_password(username=user, password=password);
		self.channel = self.trans.open_session();
		self.channel.get_pty();
		self.channel.invoke_shell();

	#给服务器发送一个命令
	def sendCmd(self,cmd):
		self.channel.sendall(cmd);
		
	#接收的时候,有时候服务器处理的比较慢,需要设置一个延时等待一下。
	def recvResponse(self,timeout):
		data=b'';
		while True:
			try:
				#使用select,不断的读取数据,直到没有多余的数据了,超时返回。
				readable,w,e= select.select([self.channel],[],[],timeout);
				if self.channel in readable:
					data = self.channel.recv(1024);
					sys.stdout.write(data.decode())
					sys.stdout.flush()
				else:
					return data.decode();
			except TimeoutError:
				return data.decode;
	#关闭客户端
	def close(self):
		self.channel.close()
		self.trans.close()

host='your ip';
port=22;#your port
user='your user';
pwd='your pwd';

ssh = sshClient(host,port,user,pwd);
response = ssh.recvResponse(1)
response = ssh.sendCmd("ls\n");
ssh.sendCmd("cd /home/renyj/mywork\n");
response = ssh.recvResponse(1);
ssh.sendCmd("ls\n");
response = ssh.recvResponse(1);

ssh.close();

效果如图所示
登录,输入ls,进入下一个目录,再输入ls

一旦建立这个连接之后,就仿佛是手动连接ssh一样。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值