$sshpass-p${passwd}ssh-p${port}-l${user}-oStrictHostKeyChecking=noxx.xx.xx.xx"ls-l"
然后你会发现,你的输出有很多你并不需要,但是又不去不掉的一些信息。对于shell命令,可以直接使用管道,或者将标准输出重定向到文件的方法取得执行结果。
通过Python可以想到使用os.popen,os.system,commands,subprocess等一些命令执行库来间接获取系统信息。这些库获取的output不仅有标准输出,还包含标准错误信息。所以每次都要对output进行数据清理,然后整理格式化,才能得到我们想要的数据。
ssh_cmd="sshpass-p${passwd}ssh-p22-lroot-oStrictHostKeyChecking=noxx.xx.xx.xx'ls-l'"
status,output=subprocess.getstatusoutput(ssh_cmd)
#数据清理
间接使用ssh命令的几个问题:
需要额外安装sshpass(如果不免密的话)
干扰信息太多,数据清理、格式化相当麻烦
代码实现不够优雅,可读性太差
ssh连接不能复用,一次连接仅能执行一次命令
代码无法全平台,仅能在Linux和OSX上使用
python3-mpipinstall
方法1:基于用户名和密码的sshclient方式登录该方法无法复用ssh连接。
#允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("xx.xx.xx.xx",username="root",port=22,password="you_password")
ssh_stdin,ssh_stdout,ssh_stderr=ssh.exec_command("ls-l")
ssh.close()
方法2:基于用户名和密码的transport方式登录该方法可以复用连接。
trans=paramiko.Transport(("xx.xx.xx.xx",22))
trans.connect(username="root",password="you_passwd")

ssh_stdin,ssh_stdout,ssh_stderr=ssh.exec_command("ls-l")
trans.close()
方法3:基于公钥的SSHClient方式登录该方法无法复用ssh连接。
#如果建立密钥对时设置了密码,password为passphrase。如果没有passphrase则无需指定password参数。
pkey=paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa',password='12345')
ssh.connect(hostname='xx.xx.xx.xx',
stdin,stdout,stderr=ssh.exec_command('ls-l')
#结果放到stdout中,如果有错误将放到stderr中
ssh.close()
方法4:基于公钥的Transport方式登录该方法可以复用连接。
#如果建立密钥对时设置了密码,password为passphrase。如果没有passphrase则无需指定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)
#执行命令,和传统方法一样
stdin,stdout,stderr=ssh.exec_command('df-hl')
print(stdout.read().decode())
trans.close()
sftp文件传输
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()
以上就是怎么通过Python实现linux远程登陆及sftp的详细内容,更多请关注主机测评网其它相关文章!
本文来源:虚拟主机--怎么通过Python实现linux远程登陆及sftp
本文地址:https://www.idcbaba.com/zhuji/2283.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



