5

R内でSSHトンネルを使用して(ファイルではなく)MySQLサーバーに接続できるようにする方法を探しています。RCurl と RODBC の組み合わせが必要になると思いますが、正しく動作しないようです。

SSH を使用して特定のファイルまたはテーブルに接続する方法について説明しているこの投稿この投稿に出会いましたが、ユーザーからの入力に基づいてさまざまな SQL クエリを実行する Shiny アプリの一部として使用したいと考えています。特定のファイルではなく、サーバーに接続する必要があります。

コードはこれらの行x = scp("remote.ssh.host.com", "/home/dir/file.txt", "My.SCP.Passphrase", user="username")に沿ったものになると思いますが、その"/home/dir/file.txt"部分をodbcConnect()ステートメントに置き換えるか、アクセスしたい特定のデータベースのポート番号に置き換えますか?

編集: 通常の odbcConnect() に使用する行はodbcConnect(dsn, uid = "userid", pwd = "password"). 問題の一部は、私は Windows で開発していますが、Linux サーバー (他の誰かが処理する) に展開されるため、自分のサーバーで正確に何を使用する必要があるかを把握するのに苦労しています。データベースに接続しています。

4

1 に答える 1

4

これを Windows でテストするには、Cygwin を入手するか、OpenSSHsshをインストールして、Linux と同じように Windows のコマンド ラインから実行できるようにします。

Windows ボックスで実行したらssh、まず SSH を介してトンネルを作成してみてください。コマンドラインからこれを実行します。

ssh -f <server_user>@<server_ip>  -L <unused_local_port>:localhost:<database_remote_port> -N 

明らかに、「<>」内のすべてを適切な情報に置き換えてください。パスワードを要求されますが、これはデータベースのパスワードではなく、サーバー自体のパスワードであることに注意してください。特に、server_ip は、データベースを搭載したサーバーである必要はなく、適切なサブネット内にあり、ほとんどすべての Linux マシンである SSH サーバーを実行する任意のサーバーです。

ここで、IP をlocalhostにし、ポートをunused_local_portにすることを除いて、ODBC 接続をセットアップします。ここで、R で新しい ODBC 接続に接続してみます。これが機能する場合は、途中までです。

system次の問題はパスワードです。SSH 経由で接続するにはパスワードを入力する必要があるためですが、R では単純なコマンドの後にパスワードを入力することはできません。そのため、いくつかの公開/秘密 RSA キー ペアをセットアップする必要があります。特に、これにより、Windowsボックスのユーザー/パスにアクセスできる人は誰でもサーバーに自動的にアクセスできるようになるため、注意してください. まず、SSH キーを生成します。

ssh-keygen -t rsa

パスフレーズを作成せず、デフォルトの場所に保存します。ここで、リモート ホストに公開鍵のディレクトリを作成し、そこに公開鍵をドロップします。

# This creates a directory on the other machine if it wasn't already there. (Type in your password on the remote machine)
ssh <server_user>@<server_ip> mkdir -p .ssh
# This adds your public key to the list of accepted ones:
cat ~/.ssh/id_rsa.pub | ssh <server_user>@<server_ip> 'cat >> .ssh/authorized_keys'

ここで、コマンド ラインから再度トンネルを作成してみます。

 ssh -f <server_user>@<server_ip>  -L <unused_local_port>:localhost:<database_remote_port> -N 

パスワードの入力を求められない場合は、鍵ペアの作成に成功しています。sshこれで、コマンド ラインからコマンドを実行する準備が整いました。ただし、それを行う前に、ssh コマンドを試して強制終了してください。そうすれば、R が実際にトンネルを作成しており、古いトンネルを再利用しているだけではないことを確認できます。これは、Windows タスク マネージャー (Ctrl+Alt+Esc) を使用して行うことができ、右クリックして ssh.exe のプロセスを終了するだけです。

だから、ただ実行してください:

system('ssh -f <server_user>@<server_ip>  -L <unused_local_port>:localhost:<database_remote_port> -N')

次に、新しいトンネリングされた ODBC 接続に接続します。

于 2013-10-23T21:23:48.277 に答える