├── .gitignore ├── .meteor ├── .gitignore ├── packages └── release ├── LICENSE ├── README.md ├── client ├── index.html ├── scripts │ ├── app.js │ ├── chatCtrl.js │ ├── extern │ │ ├── FileSaver.js │ │ ├── angular-scripts │ │ │ ├── angular-route.js │ │ │ ├── angular-spinner.js │ │ │ ├── angular │ │ │ │ └── angular.js │ │ │ ├── spin.js │ │ │ └── ui-bootstrap-tpls-0.7.0.js │ │ ├── hterm │ │ │ └── hterm.js │ │ ├── indexed.js │ │ ├── ion.rangeSlider.js │ │ ├── paramikojs.js │ │ ├── peer.js │ │ ├── startup.js │ │ └── tab.js │ ├── indexCtrl.js │ ├── localrecordCtrl.js │ ├── masterCtrl.js │ ├── masterTerminal.js │ ├── pbCtrl.js │ ├── playTerminal.js │ ├── playbackCtrl.js │ ├── recordbtnCtrl.js │ ├── remoterecordCtrl.js │ ├── resetPasswordCtrl.js │ ├── scriptsCtrl.js │ ├── services │ │ ├── MasterConnection.js │ │ ├── NuttyConnection.js │ │ ├── NuttySession.js │ │ ├── Player.js │ │ ├── Recorder.js │ │ ├── SlaveConnection.js │ │ ├── cannedscripts.js │ │ ├── compatibility.js │ │ ├── lib │ │ │ └── util.js │ │ ├── loginCtrl.js │ │ ├── nuttyalertCtrl.js │ │ ├── scriptsPaste.js │ │ ├── ssh.js │ │ └── sshext.js │ ├── sharedsessionsCtrl.js │ ├── signinCtrl.js │ ├── slaveCtrl.js │ ├── slaveTerminal.js │ └── tmuxbtnCtrl.js └── styles │ ├── extern │ ├── bootstrap │ │ ├── bootstrap-glyphicons.css │ │ └── bootstrap.css │ ├── ion.rangeSlider.css │ ├── ion.rangeSlider.skinFlat.css │ └── normalize.min.css │ └── main.css ├── packages ├── meteor-broadcast │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── client │ │ └── client.js │ ├── lib │ │ ├── eventemitter.js │ │ └── util.js │ ├── package.js │ ├── server │ │ └── server.js │ └── smart.json └── meteor-pipe │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── client │ └── client.js │ ├── lib │ ├── eventemitter.js │ └── util.js │ ├── package.js │ ├── server │ └── server.js │ └── smart.json ├── private ├── public ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff ├── forgooglebot.html ├── github-btn.html ├── images │ ├── extensionicon.png │ ├── forkme.png │ ├── nutty.png │ ├── sprite-skin-flat.png │ └── twitter.png ├── templates │ ├── chat.html │ ├── connectmodal.html │ ├── demo.html │ ├── masterTerminal.html │ ├── playTerminal.html │ ├── recordButtons.html │ ├── scriptsPaste.html │ ├── signin.html │ ├── slaveTerminal.html │ ├── tmuxButtons.html │ └── username.html └── views │ ├── 404.html │ ├── BigInteger.js │ ├── common.js │ ├── faq.html │ ├── index.html │ ├── kryptos │ ├── PublicKey │ │ └── RSA.js │ └── kryptos.js │ ├── login.html │ ├── master.html │ ├── pb.html │ ├── playback.html │ ├── python_shim.js │ ├── remoterecord.html │ ├── resetPassword.html │ ├── scripts.html │ ├── sharedsessions.html │ ├── sign_ssh_data_worker.js │ ├── slave.html │ └── util.js ├── recording.go ├── server └── server.js ├── smart.json └── smart.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .meteor -------------------------------------------------------------------------------- /.meteor/.gitignore: -------------------------------------------------------------------------------- 1 | local 2 | -------------------------------------------------------------------------------- /.meteor/packages: -------------------------------------------------------------------------------- 1 | # Meteor packages used by this project, one per line. 2 | # 3 | # 'meteor add' and 'meteor remove' will edit this file for you, 4 | # but you can also edit it by hand. 5 | 6 | standard-app-packages 7 | meteor-pipe 8 | meteor-broadcast 9 | accounts-google 10 | accounts-ui 11 | service-configuration 12 | accounts-base 13 | accounts-password 14 | email 15 | http 16 | jparker:crypto-sha1 17 | jparker:crypto-hmac 18 | -------------------------------------------------------------------------------- /.meteor/release: -------------------------------------------------------------------------------- 1 | METEOR@1.1.0.3 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nutty [](https://gitter.im/krishnasrinivas/nuttyapp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 2 | 3 | https://nutty.io 4 | 5 | ## Advanced use cases 6 | 7 | ### Docker image 8 | 9 | Details here: https://registry.hub.docker.com/u/krishnasrinivas/nuttyapp/ 10 | (docker specific code on docker branch) 11 | 12 | ### Server install 13 | 14 | Nutty server depends on MongoDB please install before proceeding https://www.mongodb.org/downloads 15 | 16 | ``` 17 | $ curl https://install.meteor.com/ | sh 18 | $ git clone https://github.com/krishnasrinivas/nuttyapp.git 19 | $ cd nuttyapp 20 | $ meteor install 21 | Configure authinfo.json (optional, details given below) 22 | $ meteor bundle ../bundle.tgz 23 | $ cd .. 24 | $ tar xzvf bundle.tgz 25 | $ export MONGO_URL=mongodb://localhost/nuttyapp 26 | $ export PORT=80 27 | (or you can run it behind nginx) 28 | $ export ROOT_URL='http://yourserver.com' 29 | $ export MAIL_URL="smtp://user:passwd@smtp.mailgun.org:587" 30 | (get a free account on mailgun) 31 | $ sudo node bundle/main.js 32 | optional (needed for webrtc): $ ./peerjs --port 9000 33 | $ go run recording.go -basedir ./recordings 34 | ``` 35 | 36 | authinfo.json should be put in "nuttyapp/private" directory with the format: 37 | 38 | { 39 | "google": { 40 | "clientId": "googleoauth-clientid-optional", 41 | "secret": "googleoauth-secret-optional" 42 | }, 43 | "webrtc": { 44 | "key": "key from peerjs.com - optional - if you need webrtc" 45 | } 46 | } 47 | 48 | google.clientId and google.secret can be configured if you need google auth signin. 49 | webrtc should be configured if you need WebRTC. For webrtc config details check http://peerjs.com/. 50 | nutty.io's webrtc config looks like this: 51 | 52 | "webrtc": { 53 | "host": "nutty.io", 54 | "port": 9000, 55 | "iceServers": [{ 56 | "url": "stun:stun.l.google.com:19302" 57 | }] 58 | } 59 | 60 | 61 | 62 | LICENSE 63 | ------- 64 | Nutty is released under [Apache License v2](./LICENSE) 65 | -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 |
2 |20 |
25 |
30 |
35 |
curl -s https://raw.github.com/krishnasrinivas/nuttyapp/master/public/install.sh | sudo sh
37 | This is a Chrome limitation. Bug-237873 had been raised which has been fixed in Chrome-34. So you do not need root permission to install nutty script for Chrome-34+ (Stable Chrome-34 has not been released yet)
38 |
39 |
40 | 41 |
46 |
51 |
56 |
61 |
66 |
71 |
77 |
82 |
87 |
6 |
10 |
14 |
18 |
22 |
27 |
31 |
35 |
39 |
44 |
48 |
52 |
56 |
60 |
64 |
69 |
73 |
[[$index+1]] | 74 |[[server.username]]@[[server.host]]:[[server.port]] | 75 |76 | | 77 | |
[[$index+1]] | 13 |14 | [[recording.sessionid]] 15 | 16 | | 17 |18 | [[datetime($index)]] 19 | | 20 |21 | 22 | | 23 |
[[$index+1]] | 36 |[[script.description]] | 37 |38 | |
[[$index+1]] | 12 |https://nutty.io/[[sharedsession.conntype]]/[[sharedsession.sessionid]] 13 | | 14 |[[sharedsession.desc]] | 15 |