Saba note

醜悪コード Ugly hacks ITものづくり

SSHでのscpコマンドの使い方

SSH経由でscpコマンドを実行するには、ログインしてscpを実行する方法と、SSHの鍵にパスワードをかけないで自動的にログインしてscpを実行する方法があります。前者は作業者が手動で行う時、またはセキュリティー上そうしなければならない時に行います。後者はscpでファイルを転送するホストがLAN内にあるとかセキュリティー上パスワードを設定しなくてもいい場合にcronなどで自動的にバックアップを行う時などに便利です。いろいろ使いどころはあるのでいずれにしろ両方覚えておいた方がいいです。
前者はscpのコピー元からコピー先のホストにSSHでログインできる必要があります。公開鍵の設定などを事前に済ませておかなくてはなりません。SSHの接続の準備をしておきます。後者は同様に鍵の設定をしますが、鍵生成の際にパスワードを空にして鍵を作りします。それらを設定してからcronに所定のコマンドを登録します。

基本的な使い方

専ら普通に使うのでしたら、以下の形式で大丈夫です。

$scp -P [port番号] [転送元のファイル] [転送先サーバーのユーザー名]@[転送先のIPアドレスまたはドメイン]:[転送先のディレクトリ]

実際にやってみるとこんな感じです。

$scp -P xxxx test_file.txt user@192.168.xx.xxx:/home/user/
test_file.txt 100% 2217 2.2KB/s 00:00

これで手元にあるカレントディレクトリにあるtest_file.txtをリモート先のマシン(sshサーバー)のユーザーuserの/home/user/ディレクトリにファイルを転送できます。ログイン不要だし結構楽ちんでいいです。ファイル名もそのままになります。しかし実際の作業はsshでログインして複数の端末を立ち上げてあれこれするというのが本当のところです。またcronなどでの自動転送などに便利です。
オプション-Pを省略するとポート22を自動的に選択します。
SSHの各オプションは以下のように入れます。-iで秘密鍵を指定する時はこんな感じです。

scp -p 222 -i /local_user/.ssh/id_rsa /tmp/backup.tar.gz remote_user@example.com:/tmp

応用編

使い方が山ほどあるのですべてを書くのは割愛。大事なところだけ抜粋してます。殆どがオプションの使い方です。

scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] v [[user@]host1:]file1 ... [[user@]host2:]file2
オプション 内容
-l ユーザー名 ログインするユーザー名を指定する。
-v デバッグ・モードを有効にする。このオプションは最大三つまで重ねて指定できる。重ねていけば,より詳細な情報が出力される。
-q 警告メッセージの出力を抑止する。
-1 SSHプロトコルのバージョン1を利用する。
-2 SSHプロトコルのバージョン2を利用する。
-4 リモート・ホストへの接続に,IPv4アドレスを利用する。
-6 リモート・ホストへの接続に,IPv6アドレスを利用する。
-N リモート・ホストでコマンドを実行しない。ポート転送を行う際に指定する。
-b IPアドレス クライアント側で利用するIPアドレスを指定する。
-e エスケープ文字 エスケープ機能を利用するモードへ遷移するためのエスケープ文字を指定する。デフォルトでは「~」がエスケープ| 文字として扱われる。SSH接続中に「~?」と入力すると,利用可能なエスケープ機能が表示される。
-o オプション | 設定ファイル(ssh_configファイル)に記述する形式でオプションを指定する。オプションの詳細は,ssh_config(5)を参照。
-P ポート番号 リモート・ホストへの接続に利用するポート番号を指定する。
-p なし パーミッションとタイムスタンプの維持
-F 設定ファイル SSH接続に利用する設定ファイルを指定する。
-i 秘密鍵ファイル RSA/DSA認証に用いる秘密鍵が格納されているファイルを指定する。
-c 暗号方式 SSH接続にて利用する暗号方式を指定する。SSHバージョン2を用いた接続の場合には,暗号方式をカンマ区切り| で指定することで利用優先順位を指定できる。
-m メッセージ認証コード メッセージ認証コードの利用優先順位を指定する。
-L ポート番号:ホスト:ホスト側ポート番号 ポート転送機能を利用する。ローカル・ホストの指定した「ポート番号」へのTCP接続| を,指定した「ホスト」の指定した「ホスト側ポート番号」へ,接続先ホストとの間で確立したSSHのトンネルを介して転送する。
-r ディレクトリを再帰的にコピーする。
-V バージョン情報を表示する。
–help コマンドの使用方法を表示する。

結局scpで最もよく使うオプションは-pです。パーミッションとタイムスタンプの維持をすることができます。scpはいろんなオプションが絡まるからなかなか変な構文になってまして、実際に使うときはこんな感じになります。各オプションに引数があるのでこんなヘンテコな感じになるわけです。

scp -p -P 22 -i /local_user/.ssh/id_rsa /tmp/backup.tar.gz remote_user@example.com:/tmp

ディレクトリごと転送する場合は、-rをつけてこんな感じです。

scp -pr -P 22 -i /local_user/.ssh/id_rsa /tmp/* remote_user@example.com:/tmp

と言ってもやっぱりもうrsyncでいいんじゃないかと最終的に思います。時々rsync使えないサーバーありますよね。

“SSHでのscpコマンドの使い方” への1件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です