自身のMacのターミナルからSSH通信でサーバーに接続し、
公開されているファイルをローカルにコピーする手順を書きます。
#手順
##1、サーバー側のSSH設定
Xserverのサーバーパネルにログイン
→SSH設定→変更→ONにする→公開鍵と認証用鍵ペアの生成→パスフレーズを設定(メモしておく)
秘密鍵のダウンロードが始まる。
ファイル名:[サーバーID].key
公開鍵と認証用鍵ペアの生成がどういうものかについては、
簡単にまとめると、パスフレーズをつくった時にローカルに秘密鍵のファイルがダウンロードされて、SSH接続するときにパスフレーズを入力することで、サーバー側の公開鍵とローカルの秘密鍵が合致してログイン認証に成功する。そんな感じだったと思います。
なので、秘密鍵のファイルを持っているかつパスフレーズを知らないとログインできないのでセキュリティがかなり強固!というイメージでOK
##2、SSH通信の準備
ホームディレクトリに.sshディレクトリを作成する
$ mkdir ~/.ssh
先ほどダウンロードした秘密鍵を.sshのディレクトリへ移動する
$ mv {サーバーID}.key ~/.ssh
その際にキーの権限を変更しておく
$ chmod 600 ~/.ssh/{サーバーID}.key
秘密鍵の名前も変更しておく
$ mv {サーバーID}.key id_xserver_{任意の名前}
##3、サーバーにログイン
この時のSSH接続のポート番号は[10022]
たぶんXserverであればポート番号は統一されてるんじゃないかと思います。
$ ssh -i ~/.ssh/{サーバーID}.key -p 10022 {サーバーID}@{サーバー番号}.xserver.jp
この時にパスワードの入力を求められるので、さっきXserverで設定したパスフレーズを入力する
ログインに成功したらコピーしたいディレクトリorファイルのルートパスを確認しておきます。
##4、サーバーのファイルをローカルのホームディレクトリにscpコマンドでコピーする
ここで私が一番つまづいたのは、scpコマンドはローカル側で使用しなければいけなかったことです。
つまり何回もサーバーに接続した状態でコピーしようとしてました。
その結果、ディレクトリがありません、だったり認証が間違っていますというエラーに頭悩まされていた。
scp -i ~/.ssh/{サーバーID}.key -P 10022 -p {サーバーID}@{サーバー番号}.xserver.jp:/{コピーしたいファイルorディレクトリ} .
ここで気をつけたいのがscpコマンドでのオプション、-Pがポート番号の指定にあたる。
-pオプションは更新日やパーミッション(権限)を保持しつつコピーする。
※-pオプションを指定しないと、中身を編集してないのに更新日が更新されたり、管理者権限がローカルにコピーした段階で変わったりするので、実際に開発する際はほとんど必須でつける
##5、ローカルのファイルをサーバーのホームディレクトリにコピーする
scp -i ~/.ssh/{サーバーID}.key -P 10022 -p {ファイル} {サーバーID}@{サーバー番号}.xserver.jp:~/
-rとオプションをつけるとディレクトリをコピーすることができる。
#まとめ
sshコマンドとscpコマンドのポート番号の指定は小文字と大文字で違うので注意すべき!!
ポート指定
scpでは-P
sshでは-p
##参考文献
scpコマンド
https://qiita.com/chihiro/items/142ebe6980a498b5d4a7
エックスサーバーにssh接続する方法(ターミナル利用)
https://qiita.com/ryo2132/items/38b5a93b3df476dd2b44
MacでターミナルからXServerへSSH接続するまで
https://qiita.com/s2ysk/items/367b5a0c027411e7626d
よく分かる公開鍵認証」~初心者でもよくわかる!VPSによるWebサーバー運用講座(2)
https://knowledge.sakura.ad.jp/3543/