問題:
paramiko模塊上傳文件失敗,提示paramiko.ssh_exception.SSHException: Channel closed.
使用python3 paramiko庫實現向遠程服務器上傳文件,腳本如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import paramiko
import uuid
import os
class Haproxy(object):
def __init__(self):
self.host = '10.224.96.87'
self.port = 22
self.username = 'root'
self.pwd = 'tahoe.webex'
self.__k = None
def create_file(self):
file_name = str(uuid.uuid4())
with open(file_name,'w') as f:
f.write('sb')
return file_name
def run(self):
self.connect()
self.upload()
# self.rename()
#self.close()
def connect(self):
transport = paramiko.Transport((self.host,self.port))
transport.connect(username=self.username,password=self.pwd)
self.__transport = transport
print("Connected to %s as %s" % (self.host, self.username))
def close(self):
self.__transport.close()
def upload(self):
# 連接,上傳
#file_name = self.create_file()
localpath= r'C:\PF\cpu_memory.py'
remotepath = r'/home/test.py'
sftp = paramiko.SFTPClient.from_transport(self.__transport)
# 將location.py 上傳至服務器 /tmp/test.py
sftp.put(localpath, remotepath)
print("File %s has uploaded to %s" % (localpath, remotepath))
def rename(self):
ssh = paramiko.SSHClient()
ssh._transport = self.__transport
# 執行命令
stdin, stdout, stderr = ssh.exec_command('mv /home/root/tttttttttttt.py /home/root/ooooooooo.py')
# 獲取命令結果
result = stdout.read()
ha = Haproxy()
ha.run()
但運行時報錯如下:
但運行時報錯如下:
C:\Users\yunliu3\AppData\Local\Programs\Python\Python39\python.exe C:/PF/test_bak.py
Connected to 10.224.96.87 as root
Traceback (most recent call last):
File "C:\PF\test_bak.py", line 77, in <module>
ha.run()
File "C:\PF\test_bak.py", line 43, in run
self.upload()
File "C:\PF\test_bak.py", line 62, in upload
sftp = paramiko.SFTPClient.from_transport(self.__transport)
File "C:\Users\yunliu3\AppData\Local\Programs\Python\Python39\lib\site-packages\paramiko\sftp_client.py", line 169, in from_transport
chan.invoke_subsystem("sftp")
File "C:\Users\yunliu3\AppData\Local\Programs\Python\Python39\lib\site-packages\paramiko\channel.py", line 72, in _check
return func(self, *args, **kwds)
File "C:\Users\yunliu3\AppData\Local\Programs\Python\Python39\lib\site-packages\paramiko\channel.py", line 283, in invoke_subsystem
self._wait_for_event()
File "C:\Users\yunliu3\AppData\Local\Programs\Python\Python39\lib\site-packages\paramiko\channel.py", line 1226, in _wait_for_event
raise e
paramiko.ssh_exception.SSHException: Channel closed.
Process finished with exit code 1
原因:因為服務器sftp的服務未開啟
解決:
1.打開/etc/ssh/sshd_config
2.加入下面的代碼(首先查詢一下sftp-server的路徑
[root@frdsa002 ~]# find / -name sftp-server
/usr/libexec/openssh/sftp-server)
Subsystem sftp
/usr/libexec/openssh/sftp-server

