У меня есть каталог, содержащий некоторые файлы и подкаталоги на моем локальном компьютере, который генерируется ежедневным скриптом Python.И затем я хочу скопировать все эти сгенерированные файлы в каталоге на сервер, а затем выполнить несколько команд для него с помощью ssh, используя пакет python paramiko.
Я хочу добавить небольшой код для безопасного копирования всего каталогаи файлы и подкаталоги внутри него на мой сервер через SSH / SCP, используя пакет python для paramiko.Я могу отправить отдельные файлы, используя один и тот же, но не могу отправить весь каталог и его содержимое, используя paramikoЭто дает мне IOError, говоря, что это каталог.
IOError: [Errno 21] Is a directory: 'temp'
Вот мой код:
from paramiko import SSHClient, AutoAddPolicy
from scp import SCPClient
class SSh(object):
def __init__(self, address, username, password, port=22):
print "Connecting to server."
self._address = address
self._username = username
self._password = password
self._port = port
self.sshObj = None
self.connect()
self.scp = SCPClient(self.sshObj.get_transport())
def sendCommand(self, command):
if(self.sshObj):
stdin, stdout, stderr = self.sshObj.exec_command(command)
while not stdout.channel.exit_status_ready():
# Print data when available
if stdout.channel.recv_ready():
alldata = stdout.channel.recv(1024)
prevdata = b"1"
while prevdata:
prevdata = stdout.channel.recv(1024)
alldata += prevdata
print str(alldata)
else:
print "Connection not opened."
def connect(self):
try:
ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy())
ssh.connect(self._address, port=self._port, username=self._username, password=self._password, timeout=20, look_for_keys=False)
print 'Connected to {} over SSh'.format(self._address)
return True
except Exception as e:
ssh = None
print "Unable to connect to {} over ssh: {}".format(self._address, e)
return False
finally:
self.sshObj = ssh
if __name__ == "__main__":
# Parse and check the arguments
ssh = SSh('10.24.143.190', 'username', 'password')
ssh.scp.put("Valigrind_BB.py") # This works perfectly fine
ssh.scp.put("temp") # IOError over here Is a directory
ssh.sendCommand('ls')
Заранее спасибо.