SSH接続:リモートのLinux上にローカルファイルを転送する

フィヨルドブートキャンプ』 というプログラミングスクールに入ってから約 1 ヶ月ほど経ったので、記念にブログを書いてみようと思います。

はじめに(ポエム)

フィヨルドブートキャンプでは、「Web アプリケーションを作りたいなら Linux に関する知識は必須」という理由から、Linux を学習するカリキュラムがあります。
僕はそれまで Linux という存在自体は知っていましたが、「自分は一生関与することはない」くらいに思っていたので、初めてインストールした時はその見た目に随分と面食らいました。

で、この Linux をインストールするのも「初心者にはかなりハードルが高いから『さくらVPS』を契約して、そこにインストールするのがいいよ」とのことで、おとなしく従うことに。
そこからコマンドラインの操作や Vim の知識などいろいろ学び、(自分にとっては関門だった)SSH 接続もなんとか理解できるようになり、悦に入るという次第。

モッタイナイ

ただ、Linux について最低限の理解ができたと言えども、使わなければすぐに忘れる。
なにより、あんまり使わないのに月々 600 ~ 700 円の利用料を垂れ流すのはモッタイナイ。

月々 600 ~ 700 円 = 年額約 8,000 円というと、ビール 2 ケースに相応する金額。
これを垂れ流すのはモッタイナイ。

そこで私は考えた。
「少しでも元を取ろう」

FTP ファイル転送を指定時刻に自動で実行したい

僕は本業の仕事で、とあるサイトの管理を請け負っており、こちらのタスクのひとつに「月に 5 ~ 6 回の頻度で指定時刻にファイルを FTP 転送せよ」という(やや面倒な)ものがあります。
作業自体は数分で終わるものの手動で対応が必要なため、「万が一忘れたらやばいな」というストレス、「FTP やらな」というタスクがいつまでも頭に残るストレスに支配されます。

そこで私は考えた。
「私には(身銭を投じている)Linux がいるじゃないか」

cron てのを使うといいらしい

よく分からないがググってみたところ、cron てのを使えば指定時刻に処理を実行でき、そこに FTP 転送する指示を書いたシェルスクリプトを置いておけばよいとのこと。

なんとなくイメージはできたものの、「はて?普段作業しているローカルのファイルを Linux に送るのってドウスルノ?」

【追記】

  • cronとcrontabの違い

「cron」は機能を示す名称で、一方「crontab」はコマンド名またはファイル名です。
【入門】cron(クロン)設定・書き方の基本 - カゴヤのサーバー研究室

  • cron は繰り返し行う処理を定期実行するもので、一度きりの自動実行には at を使うようでした。

crontab コマンドは、繰り返し実行するコマンドをスケジュールします。at コマンドは、1 回だけ実行するタスクをスケジュールします。
システムタスクを自動的に実行する方法

scp コマンドを使ってリモートの Linux 上にローカルファイルを転送する

scp コマンドというのを使えばいいらしい。

実際にやってみた

フィヨルドブートキャンプの学習において、SSH 接続する際にセキュリティ向上のため「鍵認証にする」「ポート番号変更」「パスワード認証・root 接続を無効化」といった設定を行い、さらに ~/.ssh/config をいい感じにして SSH 接続を簡単にできるようにしました。

なので、まずはこの .ssh/config を確認。
以下は例ですが、この例前提の内容です。

% cat .ssh/config
Host setsuzoku_name
    HostName    os1-111-11111.vs.sakura.ne.jp
    Port        12345
    IdentityFile    ~/.ssh/key_name
    User        user_name

適当なファイル (hoge.txt) を作る。

% cat << EOF > hoge.txt
heredoc> this is hoge
heredoc> EOF

% scp <送るファイル> <.ssh/config で設定したコマンド>:<転送先のディレクトリ> で良さそう。

% scp hoge.txt setsuzoku_name:~/
hoge.txt        100%   13     1.2KB/s   00:00

SSH 接続してみる。

% ssh setsuzoku_name

ファイルが転送されているか、中身も問題ないか確認してみる。

user_name@os1-111-11111 ~ % ls
hoge.txt
user_name@os1-111-11111 ~ % cat hoge.txt
this is hoge

とりあえず OK な様子です。

終わり

時間が来てしまったので、突然ですが閉店です。

cron てのと、シェルスクリプトについてはまだ使ったことが無いので、調べてやってみてから改めてブログに書いてみようと思います。

ご高覧いただき誠にありがとうございました m(__)m

【追記】