Возможно ли подключиться к удаленному серверу ssh с именем пользователя и паролем и прочитать файл? Я провел некоторое исследование и не получил никакой информации об этом. Я был бы признателен за понимание.
Как вы подключаетесь к удаленному серверу с помощью ssh в R
Ответ 1
Существует прямая поддержка ssh/scp в RCurl:
x = scp("remote.ssh.host.com", "/home/dir/file.txt", "My.SCP.Passphrase", user="username")
Ответ 2
Что не так с ответом @JamesThompson в Может ли R читать из файла через ssh-соединение?? (второй пример кода работает с именем пользователя и паролем)
Попробуйте следующее:
> d <- read.table(pipe('ssh -l user remotehost "cat /path/to/your/file"'))
[email protected] password: # type password here
ssh
должен быть установлен и в $PATH
.
Ответ 3
Это может не ответить на начальный вопрос @user1471980, но если вы являетесь пользователем Mac и можете запустить
ssh -l user remotehost "cat /path/to/your/file"
в вашей оболочке, поскольку @sgibb предложил, но получил ошибку
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
когда вы попытались выполнить ответ (read.table(pipe ('ssh...'))) в R и не получили приглашение пароля, у вас, вероятно, нет script ssh-askpass, так как ошибка предлагает и нужно добавить/установить его.
Я не знал, как это сделать сам, но https://github.com/markcarver/mac-ssh-askpass решил это для меня. Вот script. На странице github есть инструкции по ее установке.
#!/bin/bash
# Script: ssh-askpass
# Author: Mark Carver
# Created: 2011-09-14
# Licensed under GPL 3.0
# A ssh-askpass command for Mac OS X
# Based from author: Joseph Mocker, Sun Microsystems
# http://blogs.oracle.com/mock/entry/and_now_chicken_of_the
# To use this script:
# Install this script running INSTALL as root
#
# If you plan on manually installing this script, please note that you will have
# to set the following variable for SSH to recognize where the script is located:
# export SSH_ASKPASS="/path/to/ssh-askpass"
TITLE="${SSH_ASKPASS_TITLE:-SSH}";
TEXT="$(whoami) password:";
IFS=$(printf "\n");
CODE=("on GetCurrentApp()");
CODE=(${CODE[*]} "tell application \"System Events\" to get short name of first process whose frontmost is true");
CODE=(${CODE[*]} "end GetCurrentApp");
CODE=(${CODE[*]} "tell application GetCurrentApp()");
CODE=(${CODE[*]} "activate");
CODE=(${CODE[*]} "display dialog \"${@:-$TEXT}\" default answer \"\" with title \"${TITLE}\" with icon caution with hidden answer");
CODE=(${CODE[*]} "text returned of result");
CODE=(${CODE[*]} "end tell");
SCRIPT="/usr/bin/osascript"
for LINE in ${CODE[*]}; do
SCRIPT="${SCRIPT} -e $(printf "%q" "${LINE}")";
done;
eval "${SCRIPT}";