paramiko 模块
命令执行
用户名密码进行连接
import paramiko ssh = paramiko.SSHClient() # 创建ssh对象 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机,并将它添加进允许连接不在know_hosts文件中的主机 ssh.connect(hostname="192.168.121.129",username="root",password="123456") # 连接远程 stdin, stdout, stderr = ssh.exec_command("pwd") # 执行命令 print(type(stdin)) print(stdout.read()) # 获取标准输出 print(stderr.read()) # 获取错误输出 ssh.close()
秘钥连接
import paramiko private_key = paramiko.RSAKey.from_private_key_file("id_rsa") # 导入秘钥 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # ssh.connect(hostname="192.168.121.129",username="root",key_filename="id_rsa") #可以直接设置秘钥文件路径 ssh.connect(hostname="192.168.121.129",username="root",pkey=private_key) stdin, stdout, stderr = ssh.exec_command('ls') print(stdout.read()) ssh.close()
秘钥对象除了通过文件来创建还可以通过字符串来创建
import paramiko with open("id_ras") as f: private_key_string = f.read() private_key = paramiko.RSAKey.from_private_key(private_key_string)
文件传输
文件传输, 文件传输使用paramiko.SFTPClient连接, 而不是SSH,
import paramiko transport = paramiko.Transport(("192.168.121.129",22)) transport.connect(username="root", password="123456") # 这里也可以设置pkey, 通过秘钥进行连接 sftp = paramiko.SFTPClient.from_transport(transport) # SSH也可以使用transport # ssh = paramiko.SSHClient() # ssh._transport = transport sftp.put("本地文件","目标路径") # 上传 sftp.get("目标路径","本地路径") # 下载 sftp.close()
实现堡垒机模式下的远程执行命令
我们可以利用paramiko的invoke_shell机制来实现通过堡垒机实现服务器操作