リモートとローカルの間でファイルやディレクトリをコピーする | scpコマンドによるアップロード、またはダウンロード

ターミナルは Git for windowsに付属するGit Bash リモート先はさくらサーバーのスタンダードプランで検証。


リモートからローカルへファイルをコピーする(ファイルをサーバーからダウンロード)

	$ scp 【ユーザー名】@【ユーザー名】.sakura.ne.jp:www/animal/neko.txt ~/Documents/neko.txt
	Enter password: 【パスワード】
	
ローカルの「~/Documents」パスが示す場所は「C:\Users\user\Documents」である。
Git for windowsのホーム(ルート)は「C:\Users\user」になっているためである。

「$」になっている状態でscpコマンドを実行すること。 最初にsshコマンドでさくらサーバーと接続する必要ない。
秘密キー、公開キーの設定が済んでいない場合はscpコマンドの実行後、パスワードの入力が求められる。 パスワードはさくらサーバー(スタンダードプラン)であるならFTP接続する際のパスワードと同じである。

ローカル側のパスはファイル名を省略してもよい
	$ scp 【ユーザー名】@【ユーザー名】.sakura.ne.jp:www/animal/neko.txt ~/Documents/

ローカル側パスのファイル名を変更すると、コピー先のファイル名も変更される。
	$ scp 【ユーザー名】@【ユーザー名】.sakura.ne.jp:www/animal/neko.txt ~/Documents/aka_neko.txt

ローカルからリモートへファイルをコピーする(ファイルをサーバーへアップロード)

	$ scp ~/Documents/neko.txt 【ユーザー名】@【ユーザー名】.sakura.ne.jp:www/animal/neko.txt
	Enter password: 【パスワード】
	
単純にローカルパスとリモートパスを入れ替えるだけである。
当然ながら、こちらもパスワードの入力が求められる。
リモートパスのファイル名部分は省略してもよい。
	$ scp ~/Documents/neko.txt 【ユーザー名】@【ユーザー名】.sakura.ne.jp:www/animal

リモートからローカルへディレクトリをコピーする(ディレクトリをサーバーからダウンロード)

	$ scp -r 【ユーザー名】@【ユーザー名】.sakura.ne.jp:www/animal/test_dir ~/Documents/test_dir
	Enter password: 【パスワード】
	
「-r」オプションを指定するとディレクトリをコピーする。 もちろん階層化のファイル群も一緒にコピーする。 上記と同様、コピー先のディレクトリ名部分は省略できる。
	$ scp -r 【ユーザー名】@【ユーザー名】.sakura.ne.jp:www/animal/test_dir ~/Documents/

ローカルからリモートへディレクトリをコピーする(ディレクトリをサーバーへアップロード)

	$ scp -r ~/Documents/test_dir 【ユーザー名】@【ユーザー名】.sakura.ne.jp:www/animal/test_dir
	Enter password: 【パスワード】
	
ローカルパスとリモートパスを入れ替えるだけ。 もちろんコピー先のディレクトリ名部分は省略可能。


ホスト認証:公開鍵と秘密鍵

参考→Gitの覚書:SSH Keyの作成とGitHubへ登録 | 公開鍵と秘密鍵
参考→Eclipseによる公開キーと秘密キーの手順

SSHにログインする時、ホスト認証とユーザ認証を行う。 ユーザー認証はユーザー名とパスワードで行うログインのこと。 ホスト認証は接続先ホストがなりすましでない正しいものであるかを確認する処理である。
ホスト認証は公開鍵と秘密鍵からなる暗号化技術が使われている。 暗号の種類にはいくつか存在するが、2017年時点では RSAが主流である。

公開鍵と秘密鍵の作成手順(自分のPCからさくらサーバーに接続する場合)

  1. 自分のPCにてターミナルを開き、下記のコマンドを実行する。
    	$ ssh-keygen -t rsa
  2. いくつか質問を聞かれるので適当な値を入力してEnter。(未入力のままEnterしてもよい)
    	$ ssh-keygen -t rsa
    	Generating public/private rsa key pair.
    	Enter file in which to save the key (/c/Users/user/.ssh/id_rsa):
    	Enter passphrase (empty for no passphrase):
    	Enter same passphrase again:
    	Your identification has been saved in /c/Users/user/.ssh/id_rsa.
    	Your public key has been saved in /c/Users/user/.ssh/id_rsa.pub.
    	The key fingerprint is:
    	SHA256:c5pFZLih+CUhsIdUd2DsMg4ObPTYiNV+7T02moHcmIY user@user-PC
    	The key's randomart image is:
    	+---[RSA 2048]----+
    	|  o+..+...o      |
    	| o.oooo.oo       |
    	|+.B..+ + o.      |
    	|o=.+= = +.       |
    	|.o o B OS.o      |
    	|  . E X +*=      |
    	|     .  o= o     |
    	|        o        |
    	|                 |
    	+----[SHA256]-----+
    			
  3. 自PCのカレントディレクトリに「.ssh」ディレクトリが作成される。 .sshディレクトリの中にはid_rsaファイルととid_rsa.pubファイルが作成されている。 id_rsaファイルは秘密鍵であり、id_rsa.pubは公開鍵である。 秘密鍵であるid_rsaファイルは教えてはいけない。自PCだけで管理するように。
  4. 自PC環境からさくらサーバーに公開鍵ファイル(id_rsa.pub)を転送する。
    	$ scp .ssh/id_rsa.pub ユーザー@ユーザー.sakura.ne.jp:/home/ユーザー/.ssh/id_rsa.pub
  5. authorized_keysファイルにid_rsa.pubの内容を統合する。

    はじめて

    はじめてid_rsa.pubをアップする場合、id_rsa.pubの名前をauthorized_keysにファイル名変更する。
    1. sshコマンドでさくらサーバーにログインする。
      	ssh -l ユーザー ユーザー.sakura.ne.jp
    2. .sshディレクトリに移動。
      	% cd .ssh
    3. 先ほどアップしたid_rsa.pubファイルの名前をauthorized_keysに変更する。
      	mv id_rsa.pub authorized_keys

    2回目以降

    2回目のid_rsa.pubのアップ、つまり別PCのid_rsa.pubを追加する場合。
    1. 別PCでid_rsa.pubを作成する。
    2. FTPでもよいのでサーバー側の.sshディレクトリにid_rsa.pubを配置する。
    3. sshコマンドでさくらサーバーにログインする。
      	ssh -l ユーザー ユーザー.sakura.ne.jp
    4. .sshディレクトリに移動。
      	% cd .ssh
    5. catコマンドでid_rsa.pubの内容をauthorized_keysファイルの末尾に追加する。
      	% cat id_rsa.pub >> authorized_keys
    6. 内容を統合したら、id_rsa.pubは用済みなので削除する。
      	% rm id_rsa.pub
  6. 一旦ログアウトして、もういちどsshコマンドでログインしてみると、パスワードの入力せずログインできるようになっている。
    	ssh -l ユーザー ユーザー.sakura.ne.jp

ワンライナー

ワンライナーでSSHキーを追加する。
$ cat ~/.ssh/id_rsa.pub | ssh example@example.sakura.ne.jp 'cat >> .ssh/authorized_keys'

公開鍵をアップした後のさくらサーバーの挙動

公開鍵の登録をしたPCからSSHログインするとき、パスワード入力は不要になっている。
公開鍵を登録していない別PCからも引き続き、パスワードによる接続ができるようである。

FTPへの影響

上記の検証中にFFFTPでログインができなくなるという問題が発生した。
「新規ホスト」から再設定すると再びログインできるようになった。
暗号化の部分で干渉している箇所があるのかもしれないが詳細な原因は不明。


エックスサーバー(Xserver)のSSHのPHPバージョンを変更する

デフォルトではPHP5.4になっており、このままではLaravelがインストールできないので修正する。

ホームにbinディレクトリを作成
mkdir $HOME/bin
シンボリックリンクを作成
ln -s /usr/bin/php8.2 $HOME/bin/php
.bashrcにパスを追記するため、viで開く
vi ~/.bashrc
viにて.bashrc内に下記の一行を追記する。
export PATH=$HOME/bin:$PATH
適用したらOK
source ~/.bashrc
確認
php -v	

SSHでエックスサーバ(Xserver)に接続するための設定

① Xserverサーバーパネルにログインする権限が「管理者」であることを確認します。

SSHを利用するには、Xserverサーバーパネルにログインするアカウントの権限が「管理者」である必要がありあります。
権限が「サイト管理者」だとSSH接続ができません。その場合、上位権限を持つ担当者に「管理者」にしていただく必要があります。

詳しくは下記のURLを参考にしてください。
https://www.xserver.ne.jp/manual/man_server_adminuser.php

② XserverサーバーパネルにてSSH接続の設定をONにしてください。
詳細は以下のURLを参考にしてください。
https://www.xserver.ne.jp/manual/man_server_ssh.php
③ SSH接続には2通りの方法があります。
XServer側で認証鍵を発行する方法と、自分のローカル環境で認証鍵を発行する方法です。
今回はXServer側で認証鍵を発行し、自分のPCに設定する方法を解説します。
④ Xserverサーバーパネルにログインして、公開鍵認証用鍵ペアを生成します。
「SSHの設定 > 公開鍵認証用鍵ペアの生成」と進みます。
パスフレーズの入力が求められるので任意の文字を入力します。 パスフレーズはSSHに接続するたびに入力することになるので、入力しやすい文字列にすることをお勧めします。
秘密鍵ファイル(sykzsc.key)をダウンロードし、開発PCの任意の場所へ配置します。

秘密鍵ファイルの配置例
C:\Users\user\.ssh\hogehoge_x_server\sykzsc.key
⑤ 一旦、ここまでの設定でコマンドラインツールでSSH接続ができる状態になっています。接続コマンドは以下の通りです。
ssh -l sykzsc -i ~/.ssh/hogehoge_x_server/sykzsc.key sykzsc.xsrv.jp -p 10022
上記のコマンドを入力後、先ほど入力したパスフレーズを入力するとSSH接続ができます。
⑥ 毎回長いコマンドを入力するのは大変なので短縮入力できるようにします。 configファイルを作成
~/.ssh/config 
configファイルをテキストエディタで開き、以下のように編集します。
		Host hogehoge
		  HostName sykzsc.xsrv.jp
		  Port 10022
		  User sykzsc
		  IdentityFile ~/.ssh/hogehoge_x_server/sykzsc.key
		  ServerAliveInterval 60
		
⑦ シンプルなコマンドでSSH接続できるなりました。以下の短いコマンドでSSH接続が可能です。
ssh hogehoge

さくらインターネットに既存のSSH公開鍵を登録する【2024年版】

  1. さくらインターネットのコントロールパネルにログインする
  2. ローカルPCの「.ssh/id_rsa.pub」を開くと、SSH公開鍵のテキストが表示されるのでコピーする
  3. さくらインターネットのコントロールパネルの左メニューにある「サーバー情報」から「SSH公開鍵」と操作して表示される画面からSSH公開鍵を登録できる。