#科技一把手#用Python远程登陆服务器的最佳实践( 三 )


importparamiko#建立连接trans=paramiko.Transport((''xx.xx.xx.xx'',22))trans.connect(username=''root'',password=''you_passwd'')#将sshclient的对象的transport指定为以上的transssh=paramiko.SSHClientssh._transport=trans#剩下的就和上面一样了ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)ssh_stdin,ssh_stdout,ssh_stderr=ssh.exec_command(''ls-l'')print(ssh_stdout.read)#关闭连接trans.close
方法3:基于公钥密钥的SSHClient方式登录
importparamiko#指定本地的RSA私钥文件#如果建立密钥对时设置的有密码 , password为设定的密码 , 如无不用指定password参数pkey=paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa',password='12345')#建立连接ssh=paramiko.SSHClientssh.connect(hostname='xx.xx.xx.xx',port=22,username='you_username',pkey=pkey)#执行命令stdin,stdout,stderr=ssh.exec_command('ls-l')#结果放到stdout中 , 如果有错误将放到stderr中print(stdout.read)#关闭连接ssh.close
方法4:基于密钥的Transport方式登录
importparamiko#指定本地的RSA私钥文件#如果建立密钥对时设置的有密码 , password为设定的密码 , 如无不用指定password参数pkey=paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa',password='12345')#建立连接trans=paramiko.Transport(('xx.xx.xx.xx',22))trans.connect(username='you_username',pkey=pkey)#将sshclient的对象的transport指定为以上的transssh=paramiko.SSHClientssh._transport=trans#执行命令 , 和传统方法一样stdin,stdout,stderr=ssh.exec_command('df-hl')print(stdout.read.decode)#关闭连接trans.close
以上四种方法 , 可以帮助你实现远程登陆服务器执行命令 , 如果需要复用连接:一次连接执行多次命令 , 可以使用方法二和方法四 。
用完后 , 记得关闭连接 。
实现sftp文件传输
同时 , paramiko做为ssh的完美解决方案 , 它非常专业 , 利用它还可以实现sftp文件传输 。
【#科技一把手#用Python远程登陆服务器的最佳实践】importparamiko#实例化一个trans对象#实例化一个transport对象trans=paramiko.Transport(('xx.xx.xx.xx',22))#建立连接trans.connect(username='you_username',password='you_passwd')#实例化一个sftp对象,指定连接的通道sftp=paramiko.SFTPClient.from_transport(trans)#发送文件sftp.put(localpath='/tmp/11.txt',remotepath='/tmp/22.txt')#下载文件sftp.get(remotepath='/tmp/22.txt',localpath='/tmp/33.txt')trans.close
到这里 , Paramiko已经完胜了 , 但是仍然有一个痛点我们没有提及 , 就是多平台 , 说的就是Windows , 这里就有一件好事 , 一件坏事了 ,。
好事就是:paramiko支持windows坏事就是:你需要做很多复杂的准备 , 你可google解决 , 但是我建议你直接放弃 , 坑太深了 。
#科技一把手#用Python远程登陆服务器的最佳实践
文章图片
#科技一把手#用Python远程登陆服务器的最佳实践
文章图片
写在最后
经过了一番对比 , 和一些实例的展示 , 可以看出Paramiko是一个专业、让人省心的ssh利器 , 个人认为Paramiko模块是运维人员必学模块之一 , 如果你恰好需要在Python代码中实现ssh到远程服务器去获取一些信息 , 那么我把Paramiko推荐给你 。


推荐阅读