Linuxコマンド辞典 scpコマンド(ネットワーク)

通信を暗号化してリモートホストにファイルをコピーする「scp」コマンドの概要と使い方を記載しています。SCP及びSSHのパスワードを自動入力についても解説。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

概要・使用方法

書式

$ scp [オプション] コピー元ファイル名・・・[[ユーザ名@]ホスト名:]コピー先ファイル名

SSHプロトコルを利用してリモートホストへ経路を暗号化してファイルを転送します。sshで利用される公開鍵暗号認証を利用できるので、公開鍵をリモートホストに登録し秘密鍵にパスフレーズをつけなければログインパスワードを入力することなく、暗号化されたファイル転送ができるようになります。-3オプションは、ローカル端末とリモートホストA、リモートホストBの3台構成がある場合に、リモートホストAからリモートホストBに、ローカルからファイルを転送を指示できます。

オプション

-C圧縮して通信を行う
-F ファイル名SSHクライアントの設定ファイルを指定する
-i 秘密鍵公開鍵認証で利用する秘密鍵を指定する
-P ポート接続先のポート番号を指定する(デフォルトでは22/TCP)
-l 数値kビット/sの帯域制限を行う
-p送信元ファイルのタイムスタンプを変更しないで転送する
-q送信状況を示すプログレスバーを表示しない
-rディレクトリを再帰的に送る
-4IPv4で接続する
-6IPv6で接続する
-3リモートホストから別のリモートホストへファイルの転送をする

SSHを利用してリモートホストにファイルをコピーする

ローカルファイルをリモートホストのユーザーホーム(/home/ユーザー名/)に転送する

$ scp 転送したいファイル ユーザ名@IPアドレス:パス

実行結果

[rin@localhost ~]$ scp test.txt rin@192.168.0.102:~/
rin@192.168.0.102's password: 
test.txt                                                                                                                         100%    6    16.7KB/s   00:00    
[rin@localhost ~]$ 

ディレクトリをオリジナルファイルのタイムスタンプを変更せず圧縮して転送する

$ scp ディレクトリ ユーザー名@IPアドレス:パス

実行結果

[rin@localhost ~]$ scp -prC ./ rin@192.168.0.102:~/
rin@192.168.0.102's password: 
.bash_logout                                                                                                                     100%   18     1.0KB/s   00:00    
.bash_profile                                                                                                                    100%  193   703.0KB/s   00:00    
.bashrc                                                                                                                          100%  231   955.9KB/s   00:00    
lastnotification                                                                                                                 100%   11    74.8KB/s   00:00    
applet_dirlist                                                                                                                   100%    0     0.0KB/s   00:00    
session.log                                                                                                                      100%  135   804.9KB/s   00:00    
log                                                                                                                              100% 1067     5.0MB/s   00:00    
update-check-3.28                 
・
・
                      

リモートホストから別のホストにファイル転送する

$ scp -3 IPアドレス:ファイルパス IPアドレス:ディレクトリパス

実行結果

[rin@localhost ~]$ scp -3 10.10.0.1:/tmp/test.txt 192.168.0.102:/tmp/
                      

リモートホスト10.10.0.1から/tmp/text.txtを別のリモートホスト192.168.0.102の/tmp/に転送する

ローカルのディレクトリを再帰的に転送する

$ scp -r ディレクトリ ユーザー名@IPアドレス:/tmp/

実行結果

[rin@localhost ~]$ scp -r ./ rin@192.168.0.102:/tmp/
rin@192.168.0.102's password: 
.bash_logout                                                                                                                     100%   18    21.1KB/s   00:00    
.bash_profile                                                                                                                    100%  193   340.5KB/s   00:00    
.bashrc                                                                                                                          100%  231   511.5KB/s   00:00    
lastnotification                                                                                                                 100%   11    21.7KB/s   00:00    
applet_dirlist                                                                                                                   100%    0     0.0KB/s   00:00                                                                                                                        100%  876     1.5MB/s   00:00    
[rin@localhost ~]$ 

ssh及びScpでパスワード入力を自動化する。

sshpassというコマンドで、ssh及びSCPコマンドにパスワードを渡して自動化することができます。sshpassコマンドがインストールされていないことがあるので、yumのコマンドでインストールします。

sshpassインストール

sudo yum install -y sshpass

パスワードをscpに渡す構文

sshpass -p パスワード  scp -Pポート番号 -C ローカルファイル ログインID@接続先:パス
sshpass -p test  scp -P22 -C ./mysql.dump test@192.168.0.10:~/