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