paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作。
如果python服务器对被远程控制机器开启了免密验证,即在python服务器上可通过ssh 用户名@被控制机器ip 登录被远程控制机器,而不用输入密码,那么获取python服务器的私钥并通过私钥进行连接,如果没有开启免密验证则通过密码进行连接。
1.开启免密验证
#执行命令 import paramiko #获取本机私钥 private_key=paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') #实例化SSHClient ssh = paramiko.SSHClient() #自动添加策略,保存python服务器的主机名和密钥信息 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接被远程控制机器 ssh.connect('被控制机器ip', 端口号, '登录用户名', private_key[,timeout=n]) #打开一个channel并执行命令 stdin, stdout, stderr = ssh.exec_command('command') #打印执行结果 print(stdout.read()) #关闭SSHClient ssh.close()
#上传文件 import paramiko #获取本机私钥 private_key=paramiko.RSAKey.from_private_key_file(/root/.ssh/id_rsa) #获取Transport实例 t=paramiko.Transport('被控制机器ip',端口号)) #连接SSH服务端 t.connect('登录用户名',private_key) #获取sftp实例 sftp = paramiko.SFTPClient.from_transport(t) #上传文件 sftp.put('log.log','/tmp/log.log') #关闭sftp连接 t.close() #下载文件 import paramiko #获取本机私钥 private_key=paramiko.RSAKey.from_private_key_file(/root/.ssh/id_rsa) #获取Transport实例 t=paramiko.Transport('被控制机器ip',端口号)) #连接SSH服务端 t.connect('登录用户名',private_key) #获取sftp实例 sftp = paramiko.SFTPClient.from_transport(t) #下载文件 sftp.get('/tmp/log.log', 'log3.log') #关闭sftp连接 t.close()
2.未开启免密验证
#执行命令 import paramiko #实例化SSHClient ssh = paramiko.SSHClient() #自动添加策略,保存python服务器的主机名和密钥信息 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接被远程控制机器 ssh.connect('被控制机器ip', 端口号, '登录用户名', '登录密码'[,timeout=n]) #打开一个channel并执行命令 stdin, stdout, stderr = ssh.exec_command('command') #打印执行结果 print(stdout.read()) #关闭SSHClient ssh.close()
#上传文件 import paramiko#获取Transport实例 t=paramiko.Transport('被控制机器ip',端口号)) #连接SSH服务端 t.connect('登录用户名','登录密码') #获取sftp实例 sftp = paramiko.SFTPClient.from_transport(t) #上传文件 sftp.put('log.log','/tmp/log.log') #关闭sftp连接 t.close() #下载文件 import paramiko#获取Transport实例 t=paramiko.Transport('被控制机器ip',端口号)) #连接SSH服务端 t.connect('登录用户名','登录密码') #获取sftp实例 sftp = paramiko.SFTPClient.from_transport(t) #下载文件 sftp.get('/tmp/log.log', 'log3.log') #关闭sftp连接 t.close()