scpの使い方メモ

scpを使うとローカルファイルをサーバーにアップロードしたり、サーバーにあるファイルをダウンロードしたりできます。ということで、その使い方をメモしてみました。

使い方

scp [オプション] <送信元のファイル> <送信先のパス>

サンプル1

example.gzというファイルをxxx.xxx.xxx.xxxサーバー(実際にはサーバーのIPアドレスもしくはドメイン名)の/path/to/ディレクトリにアップロード
(ログイン名はscpを実行しているクライアントのユーザー名)

$ scp example.gz xxx.xxx.xxx.xxx:/path/to/

ログイン名を変更したい場合はxxx.xxx.xxx.xxxの前にusername@を追加します。

$ scp example.gz [email protected]:/path/to/

サーバー側のSSHがポート番号22以外で動作している場合は-pオプションでポート番号を指定することができます。

$ scp -p 1234 example.gz [email protected]:/path/to/

サンプル2

example.gzというファイルをxxx.xxx.xxx.xxxサーバーからダウンロード

$ scp xxx.xxx.xxx.xxx:/path/to/example.gz .

ポート番号を変更するなどのオプションはサンプル1と同様です。

サンプル3

ディレクトリを扱いたい場合は-rオプションが使えます。

$ scp -r directory xxx.xxx.xxx.xxx:/path/to/

SSHが自動でタイムアウトしないように設定

SSHが自動でタイムアウトして接続が切れないようにしたい場合はクラアント側の$HOME/.ssh/configに次のような設定を追加すればよいそうです。

ServerAliveInterval 30

このように設定すると30秒毎にメッセージが送られてタイムアウトしなくなるようです。

ちなみに、デフォルト値は0で、定期的なメッセージ送信はしない設定になっています。

パスワードの入力なしでSSHを使う設定

SSH公開鍵を使ってログインする設定の手順です。

1. クラアント側で公開鍵を作成

$ ssh-keygen
Enter file in which to save the key (/home/username/.ssh/id_rsa): [Enterキー]
Enter passphrase (empty for no passphrase): [Enterキー]
Enter same passphrase again: [Enterキー]
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:*******************************************
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
+----[SHA256]-----+

※既に作成済みの場合は飛ばしてください。
※パスフレーズを空欄にしておけばログイン時のパスワード入力は省略できます。
※複数のサーバーで同じ鍵を使い回すことも可能です。

2. 公開鍵をサーバーに転送

scpで送る場合は次のような感じになります。
xxx.xxx.xxx.xxxの部分はサーバーのIPアドレスまたはドメイン名です。)

$ scp .ssh/id_rsa.pub [email protected]:/home/username/

送信できたら、サーバーにログインして次のような感じで登録できます。

$ cat id_rsa.pub .ssh/authorized_keys
$ rm -i id_rsa.pub

以上で設定完了です。

ちなみに、サーバー側に.sshディレクトリがない場合はmkdirで作成してください。

$ mkdir .ssh
$ chmod 700 .ssh

3. パスワードによるログインを禁止する(おまけ)

パスワード入力によるログインを禁止して、公開鍵でのログインのみ許可するようにしたい場合は/etc/ssh/sshd_configに以下のような設定を追加してください。

PasswordAuthentication no

セキュリティ的には向上すると思いますが、万が一の場合にもパスワードでログインできなくなるので気を付けてください。

※設定の変更後はsystemctlなどでsshdの再起動(もしくは設定更新)を忘れずに。