¿Forma de proporcionar de forma segura una contraseña a la aplicación R desde la terminal?

¿Tiene R una función que permite a un usuario proporcionar una contraseña de forma segura, como el módulo getpass de Python?

(ver http://docs.python.org/library/getpass.html para ver un ejemplo de lo que quiero decir)

El problema es que R no tiene funciones para controlar el terminal en el que se ejecuta (algo así como Rncurses ); probablemente esto se deba a problemas de portabilidad.
Hace algún tiempo tuve problemas con el mismo problema y terminé con una función usando 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,"",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); } 

Por supuesto, no funcionará en entornos que no sean de GUI.

Concepto muy simple de Linux para la cuestión de la contraseña segura del terminal:

  password <- function(prompt = "Password:"){ cat(prompt) pass <- system('stty -echo && read ff && stty echo && echo $ff && ff=""', intern=TRUE) cat('\n') invisible(pass) } 

Mi paquete keyringr resuelve este problema recuperando contraseñas del llavero del sistema operativo subyacente (DPAPI en Windows, Keychain en OSX y Gnome Keyring en Linux).

La viñeta proporciona una explicación detallada sobre cómo usar el paquete, pero si usaba OSX y guardaba la contraseña en Keychain, podría usar el siguiente comando para devolver la contraseña a R (donde mydb_myuser es el nombre del elemento Keychain):

 install.packages("keyringr") library("keyringr") mypwd <- decrypt_kc_pw("mydb_myuser") print(mypwd) 

Por m-dz en los comentarios anteriores, ahora hay un paquete para hacer esto llamado getPass , que tiene una sola función, getPass() . Este es un reemplazo para base::readline() .

enter image description here

Aquí hay un pop-up de inicio de sesión, basado en ? ModalDialog .

 library("shiny") shinyApp( ui <- basicPage( actionButton("login", "Login"), verbatimTextOutput("secrets") ), server <- function(input, output, session) { vals <- reactiveValues(authenticated=FALSE) passwordModal <- function(message=NULL) { modalDialog( textInput("username", "Username", input$username), passwordInput("password", "Password", input$password), if (!is.null(message)) div(tags$b(message, style="color: red;")), footer = tagList( modalButton("Cancel"), actionButton("authenticate", "OK") ) ) } observeEvent(input$login, { showModal(passwordModal()) }) observeEvent(input$authenticate, { vals$authenticated <- FALSE if (!is.null(input$username) && nzchar(input$username) && !is.null(input$password) && nzchar(input$password)) { removeModal() if (input$password == "letmein") { vals$authenticated <- TRUE } else { showModal(passwordModal(message="Incorrect password!")) } } else { showModal(passwordModal(message="Please fill in your username and password")) } }) output$secrets <- renderText({ if (vals$authenticated) { paste("Don't tell anyone, ", input$username, ", but...", sep="") } else { "I can't tell you that!" } }) } ) 
    Intereting Posts