Copy file from a virtual server using python - python

I am trying to copy a file from a virtual machine to another remote machine using python paramiko. I am getting Authentication failed error message. Can you please suggest how to fix this issue.
Here is my sample code:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='MYHOST', username='username#Domain', Password='xxx', Port=22)
sftp_client = ssh.open_sftp()
sftp_client.get('\\xxxxxx\xxx\Copy.txt', 'C:\Knowledge\Script\PA.txt')
sftp_client.close()
ssh.close()

Related

Transfer a file from local server to another using Python library - Paramiko

I want to transfer a file from a local server (that'll contain the code and file) to a remote server preferably using ssh. Here's the code:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('Servername', port = 135, username='username', password='password')
print "connected successfully!"
sftp = ssh.open_sftp()
print sftp
sftp.put('G:\TestDocument.txt','G:\TestDocument.txt' )
sftp.close()
print "copied successfully!"
ssh.close()
But I get this error:
No handlers could be found for logger "paramiko.transport"
Traceback (most recent call last): File
"C:/Python27/testtransfer.py", line 5, in
ssh.connect('Servername', port = 135, username='username', password='password') File
"C:\Python27\lib\site-packages\paramiko\client.py", line 392, in
connect
t.start_client(timeout=timeout) File "C:\Python27\lib\site-packages\paramiko\transport.py", line 545, in
start_client
raise e SSHException: Error reading SSH protocol banner
Can you tell me why am I receiving this error? I have purposely used port 135 because port 22 is closed on the target server and 135 (among others) is open.
You can even suggest some other way in which I can transfer files from one server to another using Python.
SSHException: Error reading SSH protocol banner
the error usually means the remote service was not a ssh service. try to make sure the service on port 135 is actually ssh.
And what's the OS on your server? Windows? if so you may need to setup a 3rd-part ssh server on your server. In my opinion if you need to copy files from windows to windows ftp is a much simpler solution. python has a built-in lib ftplib.

How can I use ssh with python and linux to connect to windows and run commands?

I wrote a generic script on Python that supports Windows and Unix ssh connection from Unix.
When I try Unix command from Unix to create dir in Windows, I get exit 53
/usr/bin/ssh2 --password pass -l admin ip_address mkdir "C:\Temp\ALEX_TEST_EX" &
When I write only /usr/bin/ssh2 --password pass -l admin ip_address, it is Ok. I login to Windows
When I try C:\Temp\ALEX_TEST_EX on this machine manually it is also Ok.
What is problem?
I also try to use with Python ssh2 command like
import paramiko
ssh = paramiko.SSHClient()
ssh.connect("ip_address", username="admin", password="pass")
but I get exceptions
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/python3.5/site-packages/paramiko/client.py", line 402, in connect
self, server_hostkey_name, server_key
File "/python3.5/site-packages/paramiko/client.py", line 768, in missing_host_key
'Server {!r} not found in known_hosts'.format(hostname)
paramiko.ssh_exception.SSHException: Server 'X.Y.Z.W' not found in known_hosts
You have not configued the client machine to allow you to know the server you are trying to connect to. You can either configure the client, or as a work around you can set the MissingHostKeyPolicy on paramiko like:
Code:
To warn when host not in known hosts:
ssh.set_missing_host_key_policy(paramiko.WarningPolicy)
To auto add host to know hosts:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
Full Code:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.WarningPolicy)
ssh.connect("localhost", username="admin", password="pass")

Paramiko Segmentation Fault during Connect

I am trying to use paramiko to execute an ssh command remotely and get the results back. I run into an issue when trying to connect to the host. My code is as follows:
from paramiko import SSHClient
import paramiko
from socket import gethostbyaddr
root = '<path>/<to>/<key_file>'
client = SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
hostname = gethostbyaddr(instance.public_ip)[0]
client.connect(hostname=hostname, username=instance.user, key_filename=root)
stdin, stdout, stderr = client.exec_command("ls")
print(stdout.readlines())
client.close()
When I call client.connect(...) a segmentation fault occurs. I have tracked down the issue as far as self.start() on line 488 of transport.py with paramiko version 2.1.2 and python version 2.7.12.
Any help is appreciated!

Transfer a local file to a remote server(windows) using python

Hi I have this sample path "\10.81.67.162" which is a remote server (windows OS)
I want to be able to transfer files (local) to the remote server using paramiko in python.
I can make it work if the server is in linux.
This is my sample code
import paramiko
import base64
username = 'username'
password = 'password'
host = "10.81.67.162"
port = 22
transport = paramiko.Transport((host,port))
transport.connect(username = username, password = password)
stfp = paramiko.SFTPClient.from_transport(transport)
But having thhis error in windows:
Traceback (most recent call last):
File "ssh.py", line 9, in <module>
transport = paramiko.Transport((host,port))
File "build\bdist.win32\egg\paramiko\transport.py", line 289, in __init__
File "C:\Python27\lib\socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 10061] No connection could be made because the target machi
ne actively refused it
Python version 2.7
Paramiko version 1.7.5
Thanks!
There is no SSH server running on Windows. Thats why you are not able to connect.
Windows doesn't support SSH natively. You need to install third-party SSH server on your remote windows hosts like cygwin, bitwise ssh or freeSSHD.
Or if you are interested to run only commands on windows host then you can use winrm protocol which is natively supported by Windows. For this you need a python library pywinrm. I have used this and works fine:
https://github.com/diyan/pywinrm
If you're trying to connect to a network drive, you can use win_unc:
import os
from win_unc import UncCredentials, UncDirectory, UncDirectoryConnection
creds = UncCredentials('USERNAME', 'PASSWORD')
unc = UncDirectory(r'\\<computername>\c$', creds)
conn = UncDirectoryConnection(unc)
conn.connect()
print list(os.listdir(r'\\<computer_name>\c$\<folder>'))

Copy a directory structure including files from one remote machine to another using python

I want to copy a directory recursively from one remote machine to another remote machine with Python, probably using paramiko.
I am looking for something similar to the following scp command, but using python instead:
scp user#10.3.0.1:/path/to/file user#10.3.0.2/path/to/file
Run this command from the machine where u want to copy these file(not from source machine).
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('10.3.0.1', username='user', password='password')
stdin, stdout, stderr = client.exec_command('rsync -rav pi#10.3.0.1:path/to/file ~/')
for line in stdout:
print '... ' + line.strip('\n')
client.close()

Categories