fanlong0212

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  59 随笔 :: 68 文章 :: 2 评论 :: 99873 阅读

一: 使用paramiko

#设置ssh连接的远程主机地址和端口
t=paramiko.Transport((ip,port))
#设置登录名和密码
t.connect(username=username,password=password)
#连接成功后打开一个channel
chan=t.open_session()
#设置会话超时时间
chan.settimeout(session_timeout)
#打开远程的terminal
chan.get_pty()
#激活terminal
chan.invoke_shell()
然后就可以通过chan.send('command')和chan.recv(recv_buffer)来远程执行命令以及本地获取反馈。

 

paramiko有两个模块SSHClient()和SFTPClient()

利用SSHClient()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#coding:utf-8
import paramiko
 
#创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='192.168.2.103', port=22, username='root', password='123456')
 
# 执行命令
stdin, stdout, stderr = ssh.exec_command('ls')
# 获取命令结果
result = stdout.read()
print (str(result,encoding='utf-8'))
# 关闭连接
ssh.close()

SSHClient()里面有一个transport变量,这个是用于获取连接的,因此我们也可以单独的获取到transport变量,然后执行连接操作

1
2
3
4
5
6
7
8
9
10
11
12
13
#coding:utf-8
import paramiko
 
transport = paramiko.Transport(('192.168.2.103', 22))
transport.connect(username='root', password='123456')
 
ssh = paramiko.SSHClient()
ssh._transport = transport
 
stdin, stdout, stderr = ssh.exec_command('df')
print (str(stdout.read(),encoding='utf-8'))
 
transport.close()

用transport实现上传下载以及命令的执行:

二,与linux连接

下面是两种使用paramiko连接到linux服务器的代码

方式一:

1
2
3
1 ssh = paramiko.SSHClient()
2 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
3 ssh.connect("某IP地址",22,"用户名", "口令")

方式二:

SFTPClient()也是使用transport来实现的,因此如果有需求需要执行命令和上传文件糅合在一起的话,那么就需要使用transport的方式来实现。

如果连接远程主机需要提供密钥,上面第二行代码可改成:

2.1 windows对linux运行任意命令,并将结果输出

如果linux服务器开放了22端口,在windows端,我们可以使用paramiko远程连接到该服务器,并执行任意命令,然后通过 print或其它方式得到该结果,

代码如下:

其中的”你的命令”可以任意linux支持的命令

2.2 从widnows端下载linux服务器上的文件:

2.3 从widnows端上传文件到linux服务器:

 

 

posted on   fanlong0212  阅读(290)  评论(0编辑  收藏  举报
编辑推荐:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示