SSH でログインできるリモートホストとのファイルのやり取りは SCP を使うことが多い。 ただ、頻繁にやり取りするときは、それも面倒に感じることがある。 ただ、あんまり手間のかかる設定作業はしたくない。 そんなときは SSHFS を使うと手軽に楽ができそう。
使った環境は次の通り。
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS" $ uname -r 4.15.0-20-generic
下準備
まず、ファイルを頻繁にやり取りする先として 192.168.33.10
という IP アドレスのホストがいたとする。
$ ping -c 3 192.168.33.10 PING 192.168.33.10 (192.168.33.10) 56(84) bytes of data. 64 bytes from 192.168.33.10: icmp_seq=1 ttl=64 time=0.761 ms 64 bytes from 192.168.33.10: icmp_seq=2 ttl=64 time=0.473 ms 64 bytes from 192.168.33.10: icmp_seq=3 ttl=64 time=0.646 ms --- 192.168.33.10 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2029ms rtt min/avg/max/mdev = 0.473/0.626/0.761/0.121 ms
このホストには、あらかじめ SSH の公開鍵をインストールしておく。
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa Generating public/private rsa key pair. Your identification has been saved in /home/vagrant/.ssh/id_rsa. Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub. The key fingerprint is: SHA256:Yby6vBiMZBv1q76ncrJYOQAMiVbHOaTEFmcGX09pTXQ vagrant@vagrant The key's randomart image is: +---[RSA 2048]----+ |o.o==*.. .=o E | |=..oB+..oo .. | |o...... =. | |. . . . o | |. + . S | | + * o | | * o o | | oo..=.. | |. .**++. | +----[SHA256]-----+ $ ssh-copy-id -i ~/.ssh/id_rsa.pub vagrant@192.168.33.10 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/vagrant/.ssh/id_rsa.pub" The authenticity of host '192.168.33.10 (192.168.33.10)' can't be established. ECDSA key fingerprint is SHA256:8qF9F+rTQA5Mqn+DhSCuAdo6jvL6RrXNBDQAEeuSkRk. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys vagrant@192.168.33.10's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'vagrant@192.168.33.10'" and check to make sure that only the key(s) you wanted were added.
これで、パスワードを入力しなくてもホストに SSH でログインできるようになった。
$ ssh vagrant@192.168.33.10 "echo Hello, World!" Hello, World!
続いてローカルのマシンには SSHFS をインストールしておく。
$ sudo apt-get -y install sshfs
これで下準備が整った。
SCP を使ってファイルをやり取りする場合
まず、前提として SCP を使ってファイルをやり取りする場合に必要となる作業を確認しておこう。
scp
コマンドを使って、転送元と転送先を指定する。
$ echo "Hello, SCP!" > greet.txt $ scp greet.txt vagrant@192.168.33.10:~/ greet.txt 100% 12 9.7KB/s 00:00
SSH で確認すると、ちゃんとファイルが転送できている。
$ ssh vagrant@192.168.33.10 "cat greet.txt" Hello, SCP!
ただ、何度もこれをやるのは結構しんどい。
基本的な使い方
続いては SSHFS を使ってみよう。
まずはマウントポイントになるディレクトリを用意する。
$ mkdir sshfsmnt
続いて sshfs
コマンドを使って、マウントしたいリモートホストのディレクトリと、ローカルホストのマウント先のディレクトリを指定する。
$ sshfs vagrant@192.168.33.10:/home/vagrant/ sshfsmnt
これで df
コマンドの結果に SSHFS でマウントした内容が表示されるようになる。
$ df Filesystem 1K-blocks Used Available Use% Mounted on udev 484508 0 484508 0% /dev tmpfs 100916 5440 95476 6% /run /dev/mapper/vagrant--vg-root 64800356 1849852 59629060 4% / tmpfs 504560 0 504560 0% /dev/shm tmpfs 5120 0 5120 0% /run/lock tmpfs 504560 0 504560 0% /sys/fs/cgroup vagrant 244810132 88761060 156049072 37% /vagrant tmpfs 100912 0 100912 0% /run/user/1000 vagrant@192.168.33.10:/home/vagrant/ 64800356 1793032 59685880 3% /home/vagrant/sshfsmnt
マウントしたディレクトリの中身を確認すると、先ほど scp
コマンドで転送したファイルもちゃんと見えている。
$ ls sshfsmnt/ greet.txt $ cat sshfsmnt/greet.txt Hello, SCP!
試しに、このファイルを書き換えてみよう。
$ echo "Hello, SSHFS!" > sshfsmnt/greet.txt
改めて ssh
コマンドを使ってリモートホスト上でファイルの内容を確認する。
$ ssh vagrant@192.168.33.10 "cat greet.txt" Hello, SSHFS!
ちゃんとリモートホスト上のファイルが書き換わっていることが分かる。
いじょう。
- 作者:もみじあめ
- 発売日: 2020/02/29
- メディア: Kindle版