最近由于工作需要,要通过Python登录Linux服务器,并进入到特定的目录,运行脚本生成一个文件,然后把文件取回本地,服务器为了安全,没有开户Telnet服务,所以只能通过SSH进行登录
直接贴代码,下面再解释:
#!/usr/bin/python
import paramiko
import os
#当前脚本路径
CUR_PATH = os.path.dirname(__file__)
#服务器ip
Host='192.168.1.XXX'
Port=22
#登录用户名
Username='XXX'
#登录密码
Password='XXX'
#登录服务器后执行的命令
Command = ['cd xxxx; ./xxxx.sh']
#本地PC路径
WinPath = CUR_PATH + '\\file_name'
#服务器上的路径
LinuxPath = '/path/file_name'
def ssh_exec_cmd(command):
'''SSHA远程登录:Windows客户端连接Linux服务器,并输入指令'''
#登录服务器
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(Host, Port, Username, Password)
#执行命令
for i in range(len(command)):
send_str = command[i] + '\n'
stdin, stdout, stderr = ssh.exec_command(send_str)
err = stderr.readlines()
out = stdout.readlines()
if (err):
print ('error:')
print (err)
#print (out)
else:
print (out)
#执行完毕,终止连接
ssh.close()
def ssh_linux_to_win(linuxpath, winpath):
'''从Linux服务器下载文件到本地
Args:
linuxpath: 文件在服务器上的路径及名字
winpath: 文件下载到本地的路径及名字
'''
client = paramiko.Transport((Host, Port))
client.connect(username=Username, password=Password)
sftp = paramiko.SFTPClient.from_transport(client)
sftp.get(linuxpath, winpath)
client.close()
print ('DownLoad file finished!')
def ssh_win_to_linux(winpath, linuxpath):
'''从windows向linux服务器上传文件
Args:
winpath: 要上传的文件在本地的路径及位置
linuxpath: 文件要上传至服务器的路径及名字
'''
client = paramiko.Transport((Host, Port))
client.connect(username=Username, password=Password)
sftp = paramiko.SFTPClient.from_transport(client)
sftp.put(winpath, linuxpath)
client.close()
print ('UpLoad file finished!')
if __name__=='__main__':
ssh_exec_cmd(Command)
#ssh_exec_cmd()
#ssh_linux_to_win(LinuxPath, WinPath)
#ssh_win_to_linux(WinPath, LinuxPath)
所需工具:
Python3.4
paramiko模块
需要下载三个文件进行安装才能用:
1、安装pyCrypto
http://www.voidspace.org.uk/python/modules.shtml#pycrypto
2、安装ecdsa
https://pypi.python.org/pypi/ecdsa/0.9
3.安装paramiko
https://github.com/paramiko/paramiko#,
安装步骤同ecdsa
这是我整理的python3.4.0安装包及以上所说的三个模块的安装包,可直接下载使用