Way to securely give a password to R application from the terminal?
Does R have a function that allows a user to provide a password securely, such as Python's getpass
module?
(see http://docs.python.org/library/getpass.html for an example of what I mean)
Solution 1:
The problem is that R does not have functions to control the terminal it is running in (something like Rncurses
); probably this is due to portability issues.
Some time ago I was struggling with the same problem and I ended up with a function using TclTk:
getPass<-function(){
require(tcltk);
wnd<-tktoplevel();tclVar("")->passVar;
#Label
tkgrid(tklabel(wnd,text="Enter password:"));
#Password box
tkgrid(tkentry(wnd,textvariable=passVar,show="*")->passBox);
#Hitting return will also submit password
tkbind(passBox,"<Return>",function() tkdestroy(wnd));
#OK button
tkgrid(tkbutton(wnd,text="OK",command=function() tkdestroy(wnd)));
#Wait for user to click OK
tkwait.window(wnd);
password<-tclvalue(passVar);
return(password);
}
Of course it won't work in non-GUI environments.
Solution 2:
Very simple linux concept for terminal secure password question:
password <- function(prompt = "Password:"){
cat(prompt)
pass <- system('stty -echo && read ff && stty echo && echo $ff && ff=""',
intern=TRUE)
cat('\n')
invisible(pass)
}
Solution 3:
Per m-dz in the comments above, there is a now a package for doing this called getPass, which has a single function, getPass()
. This is a replacement for base::readline()
.