python的paramiko模块-远程登录linux主机并操作

时间:2023-03-09 00:27:57
python的paramiko模块-远程登录linux主机并操作

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()