はじめに
R上でshコマンドを実行する際に、しばしば、パスワードの受け渡し・認証の問題でエラーが起こる。
この認証をいい感じに補助してくれるコマンドが、sshpass
である。
今回、sshpass/ssh
、sshpass/scp
コマンドを組み合わせた事例を紹介する。
まずは、sshとscpコマンドのusageを見てみる。
ssh
は、ポート22でリモートコンピュータと通信するためのプロトコルである。
scp
は、ssh通信で、コンピュータ間でのファイルの転送・コピーを行うコマンドである。
sshpassのインストール
どうもHomeBrew本家からは、
セキュリティ上の理由からsshpassのリポジトリ追加を
拒否られているとのこと*1。
なので、hudochenkovのGitHubサイトからインストールする。
system("brew install hudochenkov/sshpass/sshpass")
system("which sshpass")
sshpassのUsage
R上でSSHを実行するとバグるよ・・・
sshpass/sshコマンドを実行する場合の文法は以下の通りである。
ただ、これをRコンソールで実行するとバグってしまった。
system("sshpass -p [Your Password] ssh [Remote hostname]@[IP address / SSID]")
なので、良い子は、ターミナルタブに移動して実行しましょう。
sshpass -p [Your Password] ssh [Remote hostname]@[IP address / SSID]
R上でのSCP実行はうまくいく
sshpass/scpコマンドを実行する場合の文法は以下の通りである。
これは、うまく通った。ただ、Progress barが出ないのが残念。
system("sshpass -p [Your Password] scp [local machine file path] [Remote hostname]@[IP address / SSID]:[remote machine file path]")
ターミナルタブに移動して実行する場合には、
sshpass -p [Your Password] scp [local machine file path] [Remote hostname]@[IP address / SSID]:[remote machine file path]
ここで、[ ]の括弧は、語彙範囲を明示するもので、実際のコマンド実行時には不要である。
scpコマンドの具体例
scpコマンドの具体的な使い方を以下に示します。
scp -P 22 -r [送るファイルパス] [ユーザー名]@XXX.jp:/AAA/BBB/
scp -P 22 -r -i [秘密鍵のファイルパス] [送るファイルパス] [ユーザー名]@XXX.jp:/AAA/BBB/
scp -P 22 -r [ユーザー名]@XXX.jp:/AAA/BBB [送り先のフォルダパス]
引数 |
概要 |
-P 22 |
ポート22を指定する |
-r |
ディレクトリごと再帰的にコピーする |
-p |
コピー元のタイムスタンプやパーミッションを保持する |
-i |
ssh接続に使用する鍵ファイルを指定する |
まとめ
セキュリティ問題で拒否られてるだけあって、簡単・シームレスでコマンド実行ができる。
参考資料
webkaru.net
qiita.com
techtipshoge.blogspot.com