今回はLinuxのsftpコマンドでSSHでファイル転送をする方法を解説します。
ファイル転送にはscpというコマンドもあるみたいですが、調べてもよくわからなかったので僕はsftpを使っています。多分こっちの方がわかりやすいし使いやすい。
sftpコマンド
sftpコマンドは簡単にいうとFTPでのファイル転送をSSHでやっている感じです。
FilezillaなどのFTPソフトを使うより、ターミナルからsftpコマンドで転送した方が早いですね。
なお、sftpで接続するとSSHで接続している状態になります。なので別途SSHで接続したりする必要はありません。sftpで一発です。
sftpで接続する方法
sftpコマンドでの接続は以下の通り。初期ドメインはサーバーIDでも同じです。
$ sftp サーバーアカウント名@初期ドメイン
エンターを押すとパスワードを聞かれるので入力します。何も表示されませんが、きちんと入力できているので大丈夫です。
サーバーアカウント名@初期ドメイン's password:
sftp>
と表示されたら成功です。
アカウント名や初期ドメイン(サーバーID)はサーバーのコントロールパネルから確認できます。
例えばさくらのレンタルサーバーなら、ログインして左上の「お客様情報」から確認できます。
SSH接続中でもpwd
,ls
,cd
といったコマンドが使えるので、ディレクトリの把握や階層の移動に使いましょう。touch
やmkdir
で新しくファイルやフォルダを作ることも可能です。
sftpでローカルからリモートに転送
sftpでファイルを転送
試しにローカルにある「sample.txt」をsftpでサーバーに転送します。
ローカル→サーバーへの転送はputを使います。
sftp> put ファイル名
なお、転送したいファイルまでのパスは、ファイルをターミナルにドラッグ&ドロップすれば自動で表示されます(これめっちゃ便利)
今回はsample.txtを転送したいので、以下のように書きましょう。
sftp> put path/to/sample.txt
転送したらls
コマンドで転送できているか確認します。
きちんと転送されていますね。
sftpでフォルダを転送
フォルダを転送する場合は-rオプションを付けます。
sftp> put -r フォルダ名
-r:(recursive)再帰的な処理をするオプション。
再帰的な処理とは同じ処理を繰り返し行うこと。フォルダを転送する際は中にあるファイルを転送→次のファイルを転送→次のファイルを…と同じ処理を何度も繰り返すため、-rオプションをつける必要がある。
試しにtestフォルダを転送してみます。
sftp> put -r path/to/test
転送できたらls
コマンドで確認してみましょう。
転送できていますね。
なお、同じ名前のファイル(フォルダ)がある場合は強制的に上書きされるので注意しましょう。
sftpでリモートからローカルに転送
逆にサーバーにあるファイルをローカルに転送するにはgetを使います。
sftp> get ファイル名
フォルダを転送する場合はやっぱり-r
オプションを付けます。
sftp> get -r フォルダ名
先ほどサーバーに転送した「sample.txt」と「test」フォルダを、今度はサーバーからローカルに転送してみます。
sftp> get sample.txt
sftp> get -r test
なお、サーバーからローカルに転送してきたファイルはホームディレクトリに置かれます。
確認するとファイルやフォルダがあるはずです。
sftp接続を終了する
sftp接続を終了するにはquit,exit,byeのいずれかを使います。どれでも同じなので好きなコマンドを使いましょう。
sftp> quit
転送が終わったら必ず終了のコマンドを打って終わるようにしましょう。
sftpコマンド早見表
- 接続
- sftp サーバーアカウント名@初期ドメイン
- ファイルをリモート(サーバー)へ転送
- put ファイル名
- フォルダをリモート(サーバー)へ転送
- put -r フォルダ名
- ファイルをローカルへ転送
- get ファイル名
- フォルダをローカルへ転送
- get -r フォルダ名
- 終了
- quit, exit, byeのいずれか
まとめ
sftpコマンドを使ってSSHで接続した状態でファイルの転送ができます。
ただし、サイズが大きいファイルを一気に転送すると結構時間がかかるのでその辺は注意してください。