从终端运行应用程序并发送密码

时间:2019-08-20 15:23:19

标签: shiny

我想从终端启动一个闪亮的应用程序,以避免阻塞rstudio控制台。

我的应用程序使用ssh包连接到远程计算机。

当我从rstudio启动应用程序时,会打开一个小窗口,要求我输入密码,但是当我从终端启动应用程序时,会收到错误消息。

$ "Rscript.exe" -e "shiny::runApp('app')"
Loading required package: shiny
Warning: package 'shiny' was built under R version 3.5.3
Warning: package 'ssh' was built under R version 3.5.3
Linking to libssh v0.8.6
Password callback did not return a string value
Erreur : Authentication with ssh server failed
Stopped

app.R

library(shiny)
library(ssh)

ssh.session <- ssh::ssh_connect(host = host)
cat("*** Logging in of the session ***")

# Define UI for application that draws a histogram
ui <- fluidPage()

server <- function(input, output) {

  onStop(function() {
    ssh_disconnect(ssh.session)
    cat("*** Logging out of the session ***")
  })
}

# Run the application
shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

我不知道您的用例中的安全必要性...

您可以做的(如果可以的话,在调用Rscript时可以指定密码)是在调用RScript时将密码作为附加参数提供,然后转发给ssh_connect()。您也可以对主机变量执行相同的操作。我通过以下方式调用此R文件:

Rscript --vanilla home/user/R/app.R "password"

我没有运行shiny::runApp,因为shinyApp(ui=ui, server=server)行将自动启动闪亮的应用程序,从而使我们能够预先连接到ssh。

在app.R文件中,我们将参数转发到ssh_connect。

app.R

library(shiny)
library(ssh)
args <- commandArgs(trailingOnly = TRUE)
host="host"
ssh.session <- ssh::ssh_connect(host = host,passwd = )
cat("*** Logging in of the session ***")

# Define UI for application that draws a histogram
ui <- fluidPage()

server <- function(input, output) {

  onStop(function() {
    ssh_disconnect(ssh.session)
    cat("*** Logging out of the session ***")
  })
}

# Run the application
shinyApp(ui = ui, server = server)