エンジニアを目指す日常ブログ

日々勉強したことのメモ。独学ですので間違っていたらコメント等で教えてください。

ゲストOS(Vagrant)とホストOS(Windows)間でscpによりデータをやり取りするコマンドメモ

はじめに

違うサーバどうしでファイルをやり取りするのはscpコマンドが一般的である。

ここでは、scpの基本コマンドの解説に加え、Vagrant仮想環境とローカルのファイルのやり取りを実例としてメモする。

一般的な方法と、

> scp -r -P 2222 -i  【秘密鍵の場所(ローカル)】 vagrant@127.0.0.1:/home/vagrant/workspace/tmp/ ./

簡単な方法を解説する。

scp -r vagrant:/home/vagrant/workspace/tmp/  ./

実施した環境

Vagrant環境からローカルにファイルをコピーする(基本コマンド編)

Vagrant環境の/home/vagrant/workspace/tmp/フォルダから、ローカルのカレントフォルダにファイルをコピーするコマンドは以下となる。

PowerShellで実行する。

> scp -r -P 2222 -i  【秘密鍵の場所(ローカル)】 vagrant@127.0.0.1:/home/vagrant/workspace/tmp/ ./

コマンドの解説

基本コマンドは以下。

$ scp 【コピー元】 【コピー先】

重要なオプションとしては、

  • -P:ポートを指定する
  • -r :ファイルではなくフォルダごとコピーする
  • -issh接続時に使う秘密鍵を指定する

がある。

また、コピー元となるVagrant環境のフォルダ指定は、

【ユーザ名】@【IPアドレス】:【パス】

とする。

ここで、

を調べる必要がある。調べるコマンドは以下。

> vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  (省略)

もっと簡単なコマンドでscpする方法

C:\Users\[User名]\.ssh\configSSHの情報を記載しておくことができる。

このファイルで、「名前」と「設定値」をセットで管理しておけば、「名前」を使ってscpが可能である。

.ssh\configの設定内容

Vagrantの場合は、> vagrant ssh-configで取得してきた情報をそのまま記載すればよい。

外部のサーバでも同様に記載が可能である。

C:\Users\[User名]\.ssh\config

Host aws
  HostName xx.xxx.xxx.xxx
  User ec2-user
  IdentityFile C:\Users\xxxxxx\xxxxx.pem

Host vagrant
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/Users/User/vagrant/ubuntu64_18/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

私の場合はvagrantAWS-EC2の設定が入っている。

tomiko0404.hatenablog.com
こちらの記事で、VSCode用に設定していた。

scpコマンド

上記.ssh\configvagrantという名前を付けている設定値を使いたい。

コマンドは以下のようになる。

 scp -r vagrant:/home/vagrant/workspace/tmp/  ./

おわりに

scpコマンドを使ってサーバ間でデータをやりとりすることができた。