ssh/scp/sshfsの使い方

ssh/scp/sshfsの基本的な使い方について記載します。

 

1 openssh-serverのインストール

Ubuntu 16.04 / Debian 8の場合は以下のとおりです。

$ sudo apt install -y openssh-server
$ sudo systemctl enable ssh # enabled by default
$ sudo systemctl start ssh  # started by default

Fedora 24の場合は以下のとおりです。

$ sudo dnf install -y openssh-server
$ sudo systemctl enable sshd
$ sudo systemctl start sshd

CentOS 7の場合は以下のとおりです。

$ sudo yum install -y openssh-server
$ sudo systemctl enable sshd
$ sudo systemctl start sshd

2 公開鍵認証を利用してパスワード入力を省略する

SSHの認証に公開鍵認証を用いることで、パスワードの入力を省略できます。WindowsをSSHクライアントとして使う場合はteraterm等をお使いください。

2.1 クライアント側(Linux/Unix)

公開鍵を作成します。passphraseを空にしておきます(何も入力せずにRETキーを押す)。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hiroom2/.ssh/id_rsa):
Created directory '/home/hiroom2/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hiroom2/.ssh/id_rsa.
Your public key has been saved in /home/hiroom2/.ssh/id_rsa.pub.
The key fingerprint is:

${HOME}/.ssh/に秘密鍵id_rsaと公開鍵id_rsa.pubが作成されます。

$ ls -l ~/.ssh
total 8
-rw------- 1 hiroom2 hiroom2 1675  6月 29 17:26 id_rsa
-rw-r--r-- 1 hiroom2 hiroom2  399  6月 29 17:26 id_rsa.pub

id_rsa.pubをサーバ側にコピーします。この時点ではまだパスワード入力が必要です。

$ scp .ssh/id_rsa.pub <server>:${HOME}/

2.2 クライアント側(Windows)

teratermで公開鍵を作成します。

SSH KeyGeneratorを選択します。

0001_SSH-KeyGenerator.png

デフォルトの設定のRSAと2048ビットのままでGenerateを押します。

0002_RSA-2048.png

Key passphraseは空にしたままでSave public keyとSave private keyを押します。

0003_Key-passphrase.png

id_rsa.pubをサーバ側にコピーします。

以降はサーバ側でid_rsa.pubを${HOME}/.ssh/authorized_keysに選択した後に実行します。

SSH Authenticationを選択します。

0004_SSH-Authentication.png

ユーザ名を入力し、Private key fileに先ほど作成したid_rsaを設定します。OKを押します。

0005_Use-RSA.png

Save setupを選択して設定を保存します。以下のファイルを上書きします。

C:\Program Files (x86)\teraterm\TERATERM.ini

0006_Save-setup.png

New connectionからサーバのIPアドレス/ホスト名を入力します。OKを押します。

0007_New-connection.png

SSH認証にデフォルトでid_rsaが利用されています。OKを押すことでサーバに接続できます。

0008_default.png

2.3 サーバ側

クライアントで作成したid_rsa.pubを${HOME}/.ssh/authorized_keysに追加します。

$ cat id_rsa.pub >> ${HOME}/.ssh/authorized_keys

これ以降はパスワード入力は不要となります。

3 ホスト毎にknown_hostsを使わないようにする

sshではクライアント側の${HOME}/.ssh/known_hostsにサーバの公開鍵を保存し、サーバのなりすましを検知できるようにしています。これはセキュリティを高める上で有用ですが、仮想マシンを頻繁につくり変えるような場合には不向きです。そこで特定のネットワークアドレスやドメインの場合はknown_hostsを使わないようにします。

$ cat .ssh/config
Host 192.168.11.*
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null

Host *.hiroom2.com
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null

4 scpコマンドでファイルを転送する

クライアント側からサーバへscpコマンドでファイルを転送します。scpコマンドはopenssh-client/openssh-clientsパッケージに含まれます。

$ sudo apt install -y openssh-client  # Ubuntu 16.04 / Debian 8
$ sudo dnf install -y openssh-clients # Fedora 24
$ sudo yum install -y openssh-clients # CentOS 7

ファイルの場合は以下のとおりです。

$ scp <path-to-file> <server>:<path-to>
$ scp <server>:<path-to-file> <path-to>

ディレクトリの場合は以下のとおりです。

$ scp -r <path-to-dir> <server>:<path-to>
$ scp -r <server>:<path-to-dir> <path-to>

4.1 WinSCP

 Windowsの場合はWinSCPを使います。

サーバの認証を入力します。puttyで作成した鍵しか使えないので注意です(ガイドに従った変換が必要)。

0009_Login.png

接続できました。

0010_WinSCP.png

5 sshfsでsshサーバのディレクトリをマウントする

apt、yum、dnf、homebrew等でsshfsをインストールします。

$ sudo apt install -y sshfs  # Ubuntu 16.04 / Debian 8
$ sudo yum install -y sshfs  # CentOS 7
$ sudo dnf install -y sshfs  # Fedora 24
$ brew install sshfs         # OSX

マウントする場合は以下のとおりです。

$ sshfs ubuntu-16.04-sshfs.hiroom2.com:/home/hiroom2 mnt
$ ls mnt/
Desktop    Downloads  Pictures  Templates  bin               mnt
Documents  Music      Public    Videos     examples.desktop  src

アンマウントする場合は以下のとおりです。

$ fusermount -u mnt # Run "umount mnt" on OSX

なお、Windows 10で動作するsshfsクライアントは現状ないです。多分、win-sshfsがそのうち対応するでしょう。