scpコマンドを、.ssh/configと連携して使う
.ssh/config
ファイル[1]を使うと、ssh
コマンドを短縮することができますが、実はscp
コマンドも短縮できるようになります。
まとめ
以下のような.ssh/config
ファイルを作成しているとします:
Host <リモート短縮名>
HostName <リモートIP>
Port <リモートSSHポート番号>
IdentityFile <公開鍵のパス>
User <リモートユーザ名>
Protocol 2
このとき、ssh
コマンドでもscp
コマンドでも同様に、以下の置換ができます:
-
置換される文字列:
-p <リモートSSHポート番号> -i <公開鍵のパス> <リモートユーザ名>@<リモートIP>
-
置換後の文字列:
<リモート短縮名>
この置換パターンを踏まえると、リモートホストに対してローカルホスト上から実行するssh
コマンド、scp
コマンドは、それぞれ以下のように短縮できます:
ssh
コマンド
-
短縮前:
ssh -p <リモートSSHポート番号> -i <公開鍵のパス> <リモートユーザ名>@<リモートIP>
-
短縮後:
ssh <リモート短縮名>
scp
コマンド
-
リモートホスト上のファイル
/some/remote/file
を、
ローカルホスト上のディレクトリ/some/local/directory/
配下にコピー:-
短縮前:
scp -p <リモートSSHポート番号> -i <公開鍵のパス> \ <リモートユーザ名>@<リモートIP>:/some/remote/file /some/local/directory/
-
短縮後:
scp <リモート短縮名>:/some/remote/file /some/local/directory/
-
-
ローカルホスト上のファイル
/some/local/file
を、
リモートホスト上のディレクトリ/some/remote/direcotry
配下にコピー:-
短縮前:
scp -p <リモートSSHポート番号> -i <公開鍵のパス> \ /some/local/file <リモートユーザ名>@<リモートIP>:/some/remote/direcotry/
-
短縮後:
scp /some/local/file <リモート短縮名>:/some/remote/direcotry/
-
くわしく
sshコマンドと.ssh/config
公開鍵でリモートホストにSSHログインする場合、ssh
コマンド;
ssh -p <リモートSSHポート番号> -i <公開鍵のパス> <リモートユーザ名>@<リモートIP>
で接続を行います。
ここで、.ssh/config
ファイル[1:1]を以下のように作成します:
Host <リモート短縮名>
HostName <リモートIP>
Port <リモートSSHポート番号>
IdentityFile <公開鍵のパス>
User <リモートユーザ名>
Protocol 2
すると、ssh
コマンドは以下のように短くすることができます:
ssh <リモート短縮名>
ここで、以下のようなパターンの置き換えが起きていることに注目してください:
-
置換前:
-p <リモートSSHポート番号> -i <公開鍵のパス> <リモートユーザ名>@<リモートIP>
-
置換後:
<リモート短縮名>
scpコマンドと.ssh/config
scp
コマンドで、リモートホスト上のファイル/some/remote/file
を、ローカルホスト上のディレクトリ/some/local/directory
配下に引っ張ってくる場合、ローカルホストで以下のようなコマンドを使います:
scp -p <リモートSSHポート番号> -i <公開鍵のパス> \
<リモートユーザ名>@<リモートIP>:/some/remote/file /some/local/directory/
ここで、先程の.ssh/config
ファイル:
Host <リモート短縮名>
HostName <リモートIP>
Port <リモートSSHポート番号>
IdentityFile <公開鍵のパス>
User <リモートユーザ名>
Protocol 2
が存在している場合、scp
コマンドを以下のように短くすることができます:
scp <リモート短縮名>:/some/remote/file /some/local/directory/
ssh
コマンドと同じく、以下のようなパターンの置き換えが起きていることに注目してください:
-
置換前:
-p <リモートSSHポート番号> -i <公開鍵のパス> <リモートユーザ名>@<リモートIP>
-
置換後:
<リモート短縮名>
これは、ローカルホスト上のディレクトリのファイル/some/local/file
を、リモートホスト上のディレクトリ/some/remote/direcotry
配下にコピーする場合も同じです:
-
短縮前:
scp -p <リモートSSHポート番号> -i <公開鍵のパス> \ /some/local/file <リモートユーザ名>@<リモートIP>:/some/remote/direcotry/
-
短縮後:
scp /some/local/file <リモート短縮名>:/some/remote/direcotry/
scp
コマンドが覚えられない方へ
【おまけ】scp
コマンドの書式の全体像は、「scp
コマンド特有のルール2つ」+「ssh
コマンドの知識を流用できるルール」の2つから成ります。
つまり、ssh
コマンドを覚えていれば、scp
コマンドのマスターもすぐそこです!
scp
コマンド特有のルール
短縮形の形;
scp <リモート短縮名>:/some/remote/file /some/local/directory/
scp /some/local/file <リモート短縮名>:/some/remote/direcotry/
を通して、落ち着いてscp
コマンドの構造を見ると、
-
cp
コマンド風のフォーマット:scp <from> <to>
-
リモートホスト上のパスの指定方法(コロン
:
で区切る):<リモート短縮名(=リモートホスト接続情報)>:<リモートホスト上のパス>
という、(ssh
コマンドにはない)scp
特有の2つのルールが意識しやすいと思います。これは覚えましょう。
ssh
コマンドの知識を流用できるルール
また、.ssh/config
で短縮している<リモート短縮名>
で置換していた部分:
-p <リモートSSHポート番号> -i <公開鍵> <リモートユーザ名>@<リモートIP>
は、「『リモートホストにSSH接続するために必要な情報の集まり』をssh
コマンドの書式にしたもの」なので、ここは新たに覚える必要はないです。
-
SSH config file for OpenSSH client(www.ssh.com):https://www.ssh.com/academy/ssh/config ↩︎ ↩︎
Discussion