Skip to content

Instantly share code, notes, and snippets.

@croepha
Last active June 4, 2025 07:36
Show Gist options
  • Select an option

  • Save croepha/7b53f211ae4be3c526c3 to your computer and use it in GitHub Desktop.

Select an option

Save croepha/7b53f211ae4be3c526c3 to your computer and use it in GitHub Desktop.
// This will open up a prompt for text to send to a console session on digital ocean
// Useful for long passwords
(function () {
var t = prompt("Enter text to be sent to console, (This wont send the enter keystroke)").split("");
function f() {
var character = t.shift();
var i=[];
var code = character.charCodeAt();
var needs_shift = "!@#$%^&*()_+{}:\"<>?~|".indexOf(character) !== -1
var shift = XK_Shift_L; // To help with minification
function key(keycode, down) {
i=i.concat(RFB.messages.keyEvent(keycode, down));
}
if (needs_shift) {
key(shift,1);
}
key(code,1);
key(code,0);
if (needs_shift) {
key(shift,0);
}
rfb._sock.send(i);
if (t.length > 0) {
setTimeout(f, 10);
}
}
f();
})();
// Minified version:
!function(){function t(){function n(t,e){s=s.concat(RFB.messages.keyEvent(t,e))}var o=e.shift(),s=[],i=o.charCodeAt(),c=-1!=='!@#$%^&*()_+{}:"<>?~|'.indexOf(o),r=XK_Shift_L;c&&n(r,1),n(i,1),n(i,0),c&&n(r,0),rfb._sock.send(s),e.length>0&&setTimeout(t,10)}var e=prompt("Enter text to be sent to console, (This wont send the enter keystroke)").split("");t()}();
// This is an alternate version that will open a box on ctrl+shift+v or command+shift+v
// this version might work better on browsers that block prompt from console
(function(){
var shift_down = false;
var ctrl_down = false;
var super_down = false;
var v_down = false;
$(document).keydown(function(e) {
if (e.which == 17) { ctrl_down = true; }
else if (e.which == 16) { shift_down = true; }
else if (e.which == 91) { super_down = true; }
else if (e.which == 86) { v_down = true; }
if (v_down && shift_down && (super_down || ctrl_down) ) {
ctrl_down = false;
shift_down = false;
super_down = false;
var t = prompt("Enter text to be sent to console, (This wont send the enter keystroke)").split("");
function f() {
var character = t.shift();
var i=[];
var code = character.charCodeAt();
var needs_shift = "!@#$%^&*()_+{}:\"<>?~|".indexOf(character) !== -1
var shift = XK_Shift_L; // To help with minification
function key(keycode, down) {
i=i.concat(RFB.messages.keyEvent(keycode, down));
}
if (needs_shift) {
key(shift,1);
}
key(code,1);
key(code,0);
if (needs_shift) {
key(shift,0);
}
rfb._sock.send(i);
if (t.length > 0) {
setTimeout(f, 10);
}
}
setTimeout(f, 10);
}
});
$(document).keyup(function(e) {
if (e.which == 17) { ctrl_down = false; }
else if (e.which == 16) { shift_down = false; }
else if (e.which == 91) { super_down = false; }
else if (e.which == 86) { v_down = false; }
});
})();
// Minified version:
(function(){var d=!1,b=!1,c=!1,f=!1;$(document).keydown(function(a){17==a.which?b=!0:16==a.which?d=!0:91==a.which?c=!0:86==a.which&&(f=!0);if(f&&d&&(c||b)){c=d=b=!1;var g=prompt("Enter text to be sent to console, (This wont send the enter keystroke)").split(""),h=function(){function a(b,c){d=d.concat(RFB.messages.keyEvent(b,c))}var e=g.shift(),d=[],b=e.charCodeAt(),e=-1!=='!@#$%^&*()_+{}:"<>?~|'.indexOf(e),c=XK_Shift_L;e&&a(c,1);a(b,1);a(b,0);e&&a(c,0);rfb._sock.send(d);0<g.length&&setTimeout(h,10)};
setTimeout(h,10)}});$(document).keyup(function(a){17==a.which?b=!1:16==a.which?d=!1:91==a.which?c=!1:86==a.which&&(f=!1)})})();
@adl1995

adl1995 commented Mar 11, 2017

Copy link
Copy Markdown

Worked like a charm. Is there any way to make this work with a text editor like vi?

@oldo

oldo commented Apr 26, 2017

Copy link
Copy Markdown

Wow, that's very nice!

@adl1995 it does work - just be sure to be in insert mode.

@watzon

watzon commented May 27, 2017

Copy link
Copy Markdown

I'm sure this isn't perfect, but I encountered an error while trying to use this to paste into vim. What happened is that vim would reverse the capitalization of each letter, so "hEllO" would become HeLLo". My update fixes that problem.

(function () {        
        var t = prompt("Enter text to be sent to console, (This wont send the enter keystroke)").split("");
        var o = [];
        
        for (let letter of t) {
          if (letter.match(/[a-z]/)) {
            letter = letter.toUpperCase();
          } else if (letter.match(/[A-Z]/)) {
            letter = letter.toLowerCase();
          }
          o.push(letter);
          console.log(letter);
        }
        
        function f() {
                
                var character = o.shift();
                var i=[];
                var code = character.charCodeAt();
                var needs_shift = "!@#$%^&*()_+{}:\"<>?~|".indexOf(character) !== -1
                var shift = XK_Shift_L; // To help with minification
                function key(keycode, down) {
                        i=i.concat(RFB.messages.keyEvent(keycode, down));
                }
                
                if (needs_shift) {
                        key(shift,1);
                }
                key(code,1);
                key(code,0);
                if (needs_shift) {
                        key(shift,0);
                }
                rfb._sock.send(i);
                
                if (o.length > 0) {
                        setTimeout(f, 10);
                }
        }
        f();
})();

@mayureshhedaoo

Copy link
Copy Markdown

Its working.....Thanks for this help!!!!

@mreis1

mreis1 commented Jul 8, 2017

Copy link
Copy Markdown

is anyone having issues this warning in chrome while running the script?

A window.prompt() dialog generated by this page was suppressed because this page is not the active tab of the front window. Please make sure your dialogs are triggered by user interactions to avoid this situation https://www.chromestatus.com/feature/5637107137642496

@croepha

croepha commented Jul 9, 2017

Copy link
Copy Markdown
Author

@mreis1: I added another version that might work better for chrome's blocking of window.prompt

@giovannibenussi

Copy link
Copy Markdown

@mreis1: I had the same error and the solution is to open the console in a chrome tab instead of the pop up (you can copy the url and paste it in a new tab)

@byjg

byjg commented Oct 12, 2017

Copy link
Copy Markdown

Great script!! It save my life!! I made some changes on the script to work on another host provide. The new version is here:
https://gist.github.com/byjg/a6378edb420a1c654c5f27bb494ca1c8

@andrehrferreira

Copy link
Copy Markdown

@ARHollisSr

Copy link
Copy Markdown

So Awesome. Thanks for this!

@Treeless

Treeless commented Nov 3, 2017

Copy link
Copy Markdown

THANK YOU SOOOOOOO MUCH <3 I started typing out my ssh key...

ghost commented Nov 27, 2017

Copy link
Copy Markdown

Wow. <3 I love you so much right now.

@north27

north27 commented Dec 4, 2017

Copy link
Copy Markdown

On the latest version of Chrome (at the time of writing) I get the following error:
Package is invalid. Details: 'Could not load background page 'background.html'.'.

@wfilho

wfilho commented Jan 12, 2018

Copy link
Copy Markdown

Thanks for sharing !

I cannot add chrome extension. It says that cannot add background.html.

@vgrch

vgrch commented Feb 1, 2018

Copy link
Copy Markdown

Respect! thanks for sharing.

@loeffel-io

Copy link
Copy Markdown

haha nice! 👍

@jjaaccoobb

Copy link
Copy Markdown

thank you so much

@vaxoiva

vaxoiva commented Jul 20, 2018

Copy link
Copy Markdown

hi

how about |

@SmartWeb25

Copy link
Copy Markdown

it changes ssh key letters to strange format.
for example = changed to +, date number to _@!*)&@$

@RIAEvangelist

Copy link
Copy Markdown

Doesnt work anymore

@ssivak0909

Copy link
Copy Markdown

kevin1, your right.

I updated the code to handle those characters

where i have to update this code

@shadyshrif

Copy link
Copy Markdown

It isn't working!

@kainjinez

Copy link
Copy Markdown

Not working anymore.

@elmehalawi

Copy link
Copy Markdown

Thank you for this, it works perfectly. I also ran into the same issue where the console kind of trips over itself and everything is capitalized. When I set the timeout to 100 instead of 10 (on line 27), I don't run into this issue, at least as frequently. It's a bit annoying to wait for the text to enter slowly, but I won't need to do it often so idc.

@scsskid

scsskid commented Apr 21, 2021

Copy link
Copy Markdown

thanks all! definitely works for me, I also had to increase the timeout, as elmehalawi mentioned, I used Chrome

@jaydenireland

Copy link
Copy Markdown

If characters are sent in the wrong order, watzon's script and increasing the timeout. This worked for me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment