PuTTY Auto Login Macro using AutoHotKey
PuTTY is the best SSH client and it’s free. But it lacks of this little function that I really want - Automatic login.
So I have searched many Google pages and found this PuTTY Connection Manager which I explained details in my previous post. It is a very good software.
But somehow I wanted the auto login function without the extra programs. I wanted it to be done directly with PuTTY, not within the frame of PuTTY Connection Manager.
And I found this software called AutoHotKey (http://www.autohotkey.com/) which can automate keyboard and mouse actions. But I gave up to use it at that time because I was too lazy to read all the instructions and to come up with a script for the auto login.
But yesterday, I decided to take a look again and this time I successfully created the Auto Login script! To tell you the truth, it was not easy but it is worth it. I am proud of myself
So here is the script.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | ; You need to define the full path where the putty.exe exists . 'putty_profile' should be existing profile name.
v_program=%A_ProgramFiles%\PuTTY\putty.exe -load putty_profile
v_userid=youruserid
v_passwd=yourpasswd
; msec to wait before sending userid
v_wait_userid=1000
; msec to wait before sending password
v_wait_passwd=500
;-------------------------------------------------
; To make modifier keys to work properly (such as Shift)
SetKeyDelay, 0, 10
run, %v_program% , , , newpid
;you need to wait a little for the window to initialize
;sleep, 100
winwait, ahk_pid %newpid%
;wait for the login prompt to appear
sleep, %v_wait_userid%
ControlSend, , %v_userid%{enter}, ahk_pid %newpid%
sleep, %v_wait_passwd%
ControlSend, , %v_passwd%{enter}, ahk_pid %newpid%
;create unique title so you won't be lost
WinGetTitle, v_title, ahk_pid %newpid%
v_newtitle=%v_title% - %newpid%
WinSetTitle, ahk_pid %newpid%,,%v_newtitle% |
If you want to try this yourself, you will need to change some information.
- Install AutoHotKey software.
- Create any file name with extension .ahk. For example ’ssh.ahk’ would be fine.
- Copy & paste above code into the file. But need to change the values.
v_program: PuTTY location with the -load option and connection profile name
v_userid: userid
v_passwd: passwd
v_wait_userid : msec to wait before sending userid
v_wait_passwd : msec to wait before sending passwd - Save it and double click on the file to execute it. And watch the PuTTY logging in the server automagically!
In fact, you can easily add additional commands at the end of the script to execute further commands.
Below is an example.
1 2 3 4 5 6 7 8 9 |
;maybe you want to wait some seconds while initial welcome screen appears. Let's say 2 seconds.
sleep, 2000
;cd upload
ControlSend,,cd upload{enter} , ahk_pid %newpid%
;You can send the folder list to your email account.
ControlSend,,ls|mail -s "Daily File Listing for Upload" your@emailaccount.com{enter}, ahk_pid %newpid% |
Note that there is a little issue that the password is saved as plain text. But I can live with it for now.
Here is my script in action.
Come visit again for more information on PuTTY.

Thank you very much - it worked as mentioned and will definitely prove useful in my daily operations.
Comment by iman — June 26, 2008 @ 5:21 am
putty has a option for password, I have been using that for a while because the machines which I use are formatted frequently. Since they are formatted frequently key sharing is painful. But if you want to send the password in cleartext which might be the case where you are accessing server available on your local network(not on the internet).
putty host1 -l root -pw
same information can be found at
http://jayrajput.blogspot.com/search/label/Putty
Comment by Jay — July 6, 2008 @ 4:13 pm
Jay, I really appreciate your comment. I was really happy that there is such option existed. I have tested it also worked with session profiles. So below example works perfectly.
putty -load %profile_name% -l %userid% -pw %password%But according to the official Putty Manual, the
-pwoption doesn’t work with telnet.Comment by HanaDaddy — July 6, 2008 @ 10:05 pm
This is wonderful! Great work, mate
Tnx for sharing!
Comment by Nix — July 12, 2008 @ 2:12 pm
Great work!!!
Comment by bhavin — August 5, 2008 @ 1:38 pm
You can do a lot more than automatic login with AutoHotkey. This free and small program is what we call an automation program. With the help of hotkeys like F1, F2 etc., it types whatever sequence you want it to type like “nano /var/log/apache2/access.log”.
Read more on my blog at http://cedeq.com/blog/automation/how-to-work-faster-with-putty
Comment by Sonia — August 9, 2008 @ 1:03 pm
I remember being interested in autohotkey once a long while ago, but never got around to learning it. Then I found your site when searching for a way to autologin to putty, and finally started using autohotkey, and now I use it for tons of everyday tasks, and I can’t imagine life without it. Just wanted to say thanks.
Comment by steve — August 10, 2008 @ 7:42 pm
It is a very useful starting point and thanks for your efforts, but I have to ask a question:
It looks like you are assuming you would receive the login prompt after a certain amount of time has passed and sending the username. Is there a way to check if you really received the prompt asking you the username and then actually send it ? In other words, can you read the putty screen and determine if the prompt has arrived ? In my particular case, some servers, due to their workload and/or network segments that they are located on, getting the prompt takes close to or sometimes exceeding 1 minute. And if I make the wait that long, I will have to wait unnecessary amount of time for logging into 80% of my machines. Thought about making two scripts but this time I have to figure out which script to use with which server, which is insane in a 100+ server environment and growing almost every week.
Thanks and keep up the good work.
Mel
Comment by Mel — August 18, 2008 @ 12:36 pm
Wow mel, 100 servers to maintain. That’s a big job. I myself tried to find a way to determine the login prompt, but it has been unsuccessful up to now. Once I find how to do this properly, I will let you know. Thanks.
Comment by HanaDaddy — August 18, 2008 @ 12:50 pm
I was investigating further after I left the message above and found out that you can scrape the putty.log file (or whatever name you gave to your log file) to see if the “username” prompt has arrived but this implies that your session starts with logging enabled. I have read the putty configuration but could not find how to enable/disable logging from a command line start of putty other than using “-load session_name” switch, which requires you to have a session file created manually with the logging enabled. Not a big deal for a few servers but you can imagine creating 100+ session files is not very easy let alone remembering to create one everytime a new server gets added to the landscape.
In retrospect, I considered sending a keystroke to the terminal to open up the change settings menu but this time the problem is, the usual alt-space is not popping up the context menu for putty as it does with other native/close-to-native windows.
More leads for you, as you seem to be more gifted than I do in programming as well as have more time than I do.
Comment by Mel — August 18, 2008 @ 3:15 pm