您的位置:首页 > 编程语言 > Python开发

Python编程环境下的SSH远程操作

2016-06-09 00:00 344 查看
摘要: 总结一下如何使用Python进行SSH远程基础操作,利用了paramiko和pycrypto两个模块。

###准备

使用
pip
工具安装
PyCrypto
模块和
paramiko
模块;

###测试

python>>import Crypto

python>>import paramiko

###使用

####执行远程命令

>>>import paramiko
>>>ssh = paramiko.SSHClient()
>>>ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>>ssh.connect("127.0.0.1", 22, username="name", password="key")
>>>stdin, stdout, stderr = ssh.exec_command("uptime")
>>> type(stdin)
<class 'paramiko.channel.ChannelFile'>
>>>stdout.readlines()
[u' 21:31:22 up  9:51,  2 users,  load average: 0.06, 0.11, 0.14\n']

当执行需要管理员权限的命令时,如何输入密码?
建立一个
session
对话。

import paramiko
l_password = "yourpassword"
l_host = "yourhost"
l_user = "yourusername"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(l_host, username=l_user, password=l_password)
transport = ssh.get_transport()
session = transport.open_session()
session.set_combine_stderr(True)
session.get_pty()
#for testing purposes we want to force sudo to always to ask for password. because of that we use "-k" key
session.exec_command("sudo -k dmesg")
stdin = session.makefile('wb', -1)
stdout = session.makefile('rb', -1)
#you have to check if you really need to send password here
stdin.write(l_password +'\n')
stdin.flush()
for line in stdout.read().splitlines():
print 'host: %s: %s' % (l_host, line)
ssh.close()

####上传文件

#!/usr/bin/python
import paramiko
t = paramiko.Transport(("某IP地址",22))
t.connect(username = "用户名", password = "口令")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/tmp/test.txt'
localpath='/tmp/test.txt'
sftp.put(localpath,remotepath)
t.close()

####下载文件

#!/usr/bin/python
import paramiko
t = paramiko.Transport(("某IP地址",22))
t.connect(username = "用户名", password = "口令")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/tmp/test.txt'
localpath='/tmp/test.txt'
sftp.get(remotepath, localpath)
t.close()

上传和下载也可以写一起

import paramiko
paramiko.util.log_to_file('/tmp/paramiko.log')

# Open a transport

host = "example.com"
port = 22
transport = paramiko.Transport((host, port))

# Auth

password = "foo"
username = "bar"
transport.connect(username = username, password = password)

# Go!

sftp = paramiko.SFTPClient.from_transport(transport)

# Download

filepath = '/etc/passwd'
localpath = '/home/remotepasswd'
sftp.get(filepath, localpath)

# Upload

filepath = '/home/foo.jpg'
localpath = '/home/pony.jpg'
sftp.put(localpath, filepath)

# Close

sftp.close()
transport.close()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息