An Angular SSH Client implementation using Cordova SSH Client Plugin.
- This package should be multiplatform, but the fact is that it depends on
cordova-plugin-sshclient
, and this plugin only works on Android platform.
-
Install depencencies.
-
Install component: bower install https://github.com/R3nPi2/angular-ssh.git
-
Add javascript file to your app html file (e.g. index.html):
<script src="[bower_components/]angular-ssh/angular-ssh.js"></script>
angular.module('myApp', ['angular-ssh']).
.controller('myCtrl', function($scope,$ssh) {
$scope.host = "127.0.0.1";
$scope.port = "22";
$scope.user = "me";
$scope.password = "mypassword";
$scope.cols = "80";
$scope.rows = "25";
$scope.sessionID = null;
// We have to make shure to run our code after 'deviceready' or 'cordova-plugin-sshclient'
// could not be loaded yet. We can do it like this (with our code inside 'deviceready' listener)
// or any other way. "$scope.$watch('openSessionFin', ... " could be a good idea, or launch angular
// bootstrap inside 'deviceready' listener, like this:
// "angular.bootstrap(document.querySelector('body'), ['myApp'])".
document.addEventListener('deviceready', function() {
$ssh.verifyHost($scope.host,$scope.port,"false").then(function(resp){
var connect = false;
var save = false;
// Host key is not in known_hosts
if (resp != "OK") {
connect = confirm(resp);
save = connect;
} else {
connect = true;
}
if (connect) {
if (save) {
// Save hostkey in known_hosts
$ssh.verifyHost($scope.host,$scope.port,"true").then(function(resp){
console.log("hostkey saved into known_hosts");
},function(error){
alert(error);
});
}
$ssh.openSession($scope.host,$scope.port,$scope.user,$scope.password,$scope.cols,$scope.rows).then(function(resp){
$scope.sessionID = resp;
console.log("Session opended: ".resp);
$ssh.write($scope.sessionID,"ls -latr\n").then(function(resp){
// Ssh connection output is asynchronous buffered so, to get full response,
// we can do it with a short timeout, a read loop, etc.
setTimeout(function(){
$ssh.read($scope.sessionID).then(function(resp){
$ssh.closeSession($scope.sessionID);
// Here we have connection and "ls -latr" response
alert(resp);
},function(error){
$ssh.closeSession($scope.sessionID);
alert(error);
});
},500);
},function(error){
$ssh.closeSession($scope.sessionID);
alert(error);
});
},function(error){
alert(error);
});
}
}, function(error){
alert(error);
});
});
});
All methods except storeSession
, getSessions
and getSession
, return a AngularJS Promise. For more information about promises read AngularJS documentation.
All methods except storeSession
, getSessions
and getSession
, are based on cordova-plugin-sshclient methods, so read plugin documentation if your need more information.
$ssh.openSession(hostname,port,user,password,cols,rows,width,height).then(function(success){...},function(error){...})
Connects to host, request a new PTY and starts a Shell.
Arguments
hostname
– Hostname or IP.port
– SSH port.user
– Username.password
– Password.cols
– PTY columns.rows
– PTY rows.width
– (optional: if empty, set to 0) PTY pixels width.height
– (optional: if empty, set to 0) PTY pixels height.
Success response
- Returns an integer corresponding to a unique session ID.
Error response
- Returns a string describing the error.
We should use this method to verify hostkeys.
Arguments
hostname
– Hostname or IP.port
– SSH port.saveHostKey
– This argument should be a string matching "true" or "false". If "false", the verification should be done but hostkey will not be saved into known_hosts database. If "true", hostkey should be saved into known_hosts.
Success response
- If
saveHostKey
was set to "true": returns "ADD_OK" string if everithing goes fine and hostkey is saved into known_hosts file. - If
saveHostKey
was set to "false", and hostkey allready exists into known_hosts, and hostkey is valid: returns "OK" string. - If
saveHostKey
was set to "false", and hostkey allready exists into known_hosts, but hostkey has changed: returns describing the situation. - If
saveHostKey
was set to "false", and hostkey does not exists into known_hosts, returns a string with hostkey.
Error response
- Returns a string describing the error.
$ssh.resizeWindow(sessionID,cols,rows,width,height).then(function(success){...},function(error){...})
We can use this method to resize PTY created on $ssh.openSession
.
Arguments
sessionID
– The ID returned byopenSession
.cols
– PTY columns.rows
– PTY rows.width
– (optional: if empty, set to 0) PTY pixels width.height
– (optional: if empty, set to 0) PTY pixels height.
Success response
- A string with PTY dimensions.
Error response
- Returns a string describing the error.
Read stdout and stderr buffers output.
Arguments
sessionID
– The ID returned byopenSession
.
Success response
- Returns characters read from stdout and stderr buffers.
Error response
- Returns a string describing the error.
Write a string to stdin buffer.
Arguments
sessionID
– The ID returned byopenSession
.string
– String that will be written to stdin buffer. If you want to send als
command, you should write "ls\n".
Success response
- Returns written command.
Error response
- Returns a string describing the error.
Close ssh session.
Arguments
sessionID
– The ID returned byopenSession
.
Success response
- Returns "0". It means everithing was ok.
Error response
- Returns a string describing the error.
Builds an array from known_hosts
file.
Success response
- Returns an array with known hosts found in
known_hosts
file.
Error response
- Returns a string describing the error.
Set known_hosts
file.
Arguments
knownHosts
– An array like the one returned fromgetKnownHosts
:knownHosts = [ { host: "example.com", type: "ssh-rsa", key: "AAAAB3NzaC1yc2EAAAA..." }, ... ]
Success response
- Returns an array with known hosts found in
known_hosts
file.
Error response
- Returns a string describing the error.
Pending documentation.
Arguments
sessionID
– The ID returned byopenSession
.alias
– A free string.hostname
– Hostname or IP.user
– User name.terminal
– Current terminal content. This is a multiprupose field where we could store a javascript object, string, or whaterver we want. We can use this field later to get session state withgetSession
.
Returned values
- Returns
true
.
Pending documentation.
Arguments
sessionID
– The ID returned byopenSession
.
Returned values
- An object with session info:
{ alias: "myServer", hostname: "myserver.com", user: "me", terminal: "The terminal content..." }
Pending documentation.
Returned values
- An array of objects indexed by
sessionID
with session info:[ "sessionID": { alias: "myServer", hostname: "myserver.com", user: "me", terminal: "The terminal content..." }, ... ]
- R3n Pi2 r3npi2@gmail.com (https://github.com/R3nPi2)
- Angular SSH Client is released under the GNU Affero General Public License version 3. Read LICENSE file.
Report at the github issue tracker