赞
踩
方式二:
在远程服务器上生成新的交互式shell
Python + Paramiko 的SSH基本使用:
#!/usr/bin/env python3 import os import threading import paramiko from sshtunnel import SSHTunnelForwarder # client.invoke_shell() class connect_ssh: def readData(self, shell) -> object: while True: # 接收到的服务器返回值 data = shell.recv(2048) if not data: print("quit now") break # 查看命令执行的情况 data = data.decode() print(data, end='') def connect(self, cmd): jump_host_ip = "103.115.**.**" # 跳板机 jump_host_user = “username" jump_host_key = os.getenv('HOME') + "/.ssh/id_rsa" target_bind_address = ('10.169.**.**', 22) print("connecting to the jump host") with SSHTunnelForwarder( ssh_address_or_host=(jump_host_ip, 22), # 跳板机 ssh_username=jump_host_user, ssh_pkey=jump_host_key, remote_bind_address=target_bind_address, local_bind_address=('127.0.0.1', 1234) # 可以指定任意合理的ip,port ) as tunnel: print(tunnel.local_bind_address) local_bind_host = tunnel.local_bind_host # 绑定本地的host local_bind_port = tunnel.local_bind_port # 绑定本地的port print(local_bind_port, local_bind_host) print("** connected to the jump host **") print("\nconnecting to the Destination host") client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=local_bind_host, port=local_bind_port, username=jump_host_user, key_filename=jump_host_key, banner_timeout=50000) # 激活terminal shell = client.invoke_shell() print("** connected to the jump host **") # 创建一个线程 thread = threading.Thread(target=self.readData, args=(shell,)) thread.start() # 发送命令 shell.sendall(cmd) shell.send("ifconfig\n") shell.send("exit\n") thread.join() client.close() tunnel.close() if __name__ == '__main__': server = connect_ssh() server.connect(cmd="pwd\n") print("done")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。