@@ -194,7 +194,7 @@ async def _scp(self, source, destination, scp_opts):
194194 if process .returncode != 0 :
195195 raise JujuError ("command failed: %s" % cmd )
196196
197- def ssh (
197+ async def ssh (
198198 self , command , user = None , proxy = False , ssh_opts = None ):
199199 """Execute a command over SSH on this machine.
200200
@@ -204,7 +204,24 @@ def ssh(
204204 :param str ssh_opts: Additional options to the `ssh` command
205205
206206 """
207- raise NotImplementedError ()
207+ if proxy :
208+ raise NotImplementedError ('proxy option is not implemented' )
209+ address = self .dns_name
210+ destination = "{}@{}" .format (user , address )
211+ cmd = [
212+ 'ssh' ,
213+ '-i' , os .path .expanduser ('~/.local/share/juju/ssh/juju_id_rsa' ),
214+ '-o' , 'StrictHostKeyChecking=no' ,
215+ '-q' ,
216+ destination
217+ ]
218+ cmd .extend (ssh_opts .split () if isinstance (ssh_opts , str ) else ssh_opts )
219+ cmd .extend ([command ])
220+ loop = self .model .loop
221+ process = await asyncio .create_subprocess_exec (* cmd , loop = loop )
222+ await process .wait ()
223+ if process .returncode != 0 :
224+ raise JujuError ("command failed: %s" % cmd )
208225
209226 def status_history (self , num = 20 , utc = False ):
210227 """Get status history for this machine.
0 commit comments