メモ > サーバ > 各論: ネットワーク > scpでファイルを操作する
■scpでファイルを操作する
scpコマンドとは。セキュアなファイル転送の仕組み、使い方を解説 | ミライサーバーのススメ
https://www.miraiserver.ne.jp/column/about_scp/
scpコマンドでディレクトリ(フォルダ)をコピーしました #Linux - Qiita
https://qiita.com/pugiemonn/items/3c80522f477bbbfa1302
ssh、scp、sftpコマンドをポート番号を指定して使う - bacchi.me
https://bacchi.me/linux/ssh-tips/
別のポートでSCPを実行するにはどうすればよいですか?
https://ciksiti.com/ja/chapters/8522-how-do-i-scp-with-a-different-port
■準備
送信先サーバには鍵認証でSSH接続し、そのための準備は整っているものとする
また、送信元サーバから送信先サーバへの接続も許可されているものとする(ファイヤーウォールなど)
送信元と送信先の両方に、scp_test ディレクトリを作成しておく
ここを作業ディレクトリとする
$ mkdir scp_test
$ cd scp_test/
$ pwd
/home/ec2-user/scp_test
■SSHで接続
送信元から送信先に、鍵認証でSSH接続する
以下は送信元サーバでの作業
$ vi /home/ec2-user/scp_test/id_rsa
■SCPでファイル転送
ファイル /home/ec2-user/scp_test/test1.txt を転送する
転送したいファイルを先に、転送先を後に指定する
ポート指定のオプションは「-P」と大文字なので注意
-----BEGIN RSA PRIVATE KEY----- … 秘密鍵(xxx.pem)の内容を貼り付ける
MIIEowIBAAKCAQEAryCYY8j+j5lQqBKJgdA3SLZWC7UJ9NeFkmypG4JJQwt3Gr9jG+rJY8vKUdx/
〜略〜
yT0043TsaaS2Tx7KxqdFksrRW3IH0AKqXFKVcvdhuNbjVK5ps806PEaW/AZj5oIOfpto
-----END RSA PRIVATE KEY-----
$ chmod 600 /home/ec2-user/scp_test/id_rsa … アクセス権限を設定
$ chown ec2-user:ec2-user /home/ec2-user/scp_test/id_rsa
$ ssh -p 10022 -i /home/ec2-user/scp_test/id_rsa ec2-user@203.0.113.1 … SSHで接続(対象のIPが「203.0.113.1」とする)
The authenticity of host '[203.0.113.1]:10022 ([203.0.113.1]:10022)' can't be established.
ECDSA key fingerprint is SHA256:PJy1eVu5LMIueVjLLFpLYG126qaMB8DAQR2ruDlHj6o.
ECDSA key fingerprint is MD5:48:97:79:b5:29:91:70:ba:25:75:8b:53:cf:f9:0a:89.
Are you sure you want to continue connecting (yes/no)? yes … 「yes」と入力してEnter
Warning: Permanently added '[203.0.113.1]:10022' (ECDSA) to the list of known hosts.
Last login: Wed Oct 25 15:03:12 2023 from p7cdba6cd.osakff01.ap.so-net.ne.jp
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
37 package(s) needed for security, out of 40 available
Run "sudo yum update" to apply all updates.
$ hostname … 接続できていることを確認
example.com
$ scp -P 10022 -i /home/ec2-user/scp_test/id_rsa /home/ec2-user/scp_test/test1.txt ec2-user@203.0.113.1:/home/ec2-user/scp_test/
ディレクトリ /home/ec2-user/scp_test/test2 を転送する
ディレクトリの場合は「-r」を指定する
$ scp -P 10022 -i /home/ec2-user/scp_test/id_rsa -r /home/ec2-user/scp_test/test2 ec2-user@203.0.113.1:/home/ec2-user/scp_test/
転送元ファイルのパーミッションが何であろうと、転送先には 0664 で配置される
転送元ファイルの所有者が何であろうと、転送先では接続時に使用するユーザが所有者となる
オプション「-p」を付けると、変更時間・アクセス時間・パーミッションの値を引き継いで転送できる
ただし所有者は引き継がれない(どうしても引き継ぎたければ、rsyncなど別の手段の検討が必要みたい)
$ scp -P 10022 -i /home/ec2-user/scp_test/id_rsa -p /home/ec2-user/scp_test/test4.txt ec2-user@203.0.113.1:/home/ec2-user/scp_test/
$ scp -P 10022 -i /home/ec2-user/scp_test/id_rsa -rp /home/ec2-user/scp_test/test5 ec2-user@203.0.113.1:/home/ec2-user/scp_test/
必要に応じて、以下のように転送後に所有者を調整することはできる(一括での変更になる)
# chown -hR apache. /home/ec2-user/scp_test/test
圧縮してから転送
通常の方法で圧縮して、通常の方法で転送
$ cd /home/ec2-user/scp_test
$ zip -r test3.zip test3
$ scp -P 10022 -i /home/ec2-user/scp_test/id_rsa /home/ec2-user/scp_test/test3.zip ec2-user@203.0.113.1:/home/ec2-user/scp_test/
転送先で、通常の方法で展開
$ unzip test3.zip
■SCPでファイル取得
取得したいファイルを先に、保存場所を後に指定する
$ scp -P 10022 -i /home/ec2-user/scp_test/id_rsa ec2-user@203.0.113.1:/home/ec2-user/scp_test/test3.zip /home/ec2-user/scp_test/