I'm using the Paramiko library to run a ssh
command between two servers. My "Master"
server is a Fedora 18
box, and my "Slave"
is a Windows 7
machine. In other to run a ssh
server in the Windows 7
machine, I installed FreeSSHd .After configuring freesshd
I can ssh
from the Fedora 18 machine into the Windows machine and execute a command like dir
. However, When I try doing so using Paramiko
, I'm not having the same luck:
import paramiko
import os
import errno
"""
written by Philippe Ribeiro
class Connection
stabilishes the ssh connection between two servers
allowing the executing of commands remotely
"""
class Connection:
def __init__( self, hostname, username, password):
"""Create a ssh client using the paramiko library
"""
self.host = hostname
self.user = username
self.password = password
self.port = 23
self.sshclient = paramiko.SSHClient()
self.username = username
self.password = password
try:
self.sshclient.load_system_host_keys()
self.sshclient.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
self.sshclient.connect( hostname=self.host, port=self.port,
username=self.username, password=self.password )
self.sftpclient = self.sshclient.open_sftp()
except SSHException, e:
print e
except AuthenticationException, e:
print e
except BadHostKeyException, e:
print e
def close(self):
"""Closes a client using the Connection class' API
"""
self.sshclient.close()
return
def remove_directory(self, path):
"""Remove remote directory that may contain files
It does not support directories that contain subdiretories
"""
if self.exists(path):
for filename in self.sftpclient.listdir(path):
filepath = os.path.join(path, filename)
self.sfptclient.remove(filepath)
self.sftpclient.rmdir(path)
return
def exists(self, path):
"""Return True if the remote path exists
"""
try:
self.sfptclient.stat(path)
except IOError, e:
if e.errno == errno.ENOENT:
return False
raise
else:
return True
def put_directory(self, localdir, remotedir):
"""Put a directory of files on the remote server
Create the remote directory if it does not exist
Does not support directories that contain subdirectories
Return the number of files transferred
"""
if not self.exists(remotedir):
self.sftp.client.mkdir(remotedir)
count = 0
for filename in os.listdir(localdir):
self.sftpclient.put(
os.path.join(localdir, filename),
os.path.join(remotedir, filename)
)
count += 1
return count
"""
Just for testing purposes
try to connect to a Windows machine from a Unix one
so it can execute commands remotely
"""
cmd = ["cd ..", "dir" ]
client = Connection("hostname", "username", "password")
try:
for c in cmd:
stdin, stdout, stderr = client.sshclient.exec_command(c)
print stdout.readlines()
except SSHException, e:
print e
client.close()
but when I execute:
python client.py
I get:
['Unable to execute command or shell on remote system: Failed to Execute process.\r\n']
['Unable to execute command or shell on remote system: Failed to Execute process.\r\n']
Could someone please give me a clue why isn't working? Am I missing something?
将cmd = ["cd ..", "dir" ]
替换为cmd = ['cmd.exe /c "cd C:\\ && dir"' ]
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.