■refs
・scpとsftpの違い。軽快なscpか高機能なsftp,sshに向いているのは?
■ssh,scpでファイル転送
sshを使用したファイル転送scpコマンドについて。テスト台としてawsのec2にsshのポートだけ空けておく。また、鍵を~/.ssh/DefaultAWSKey.pemにおいておく。
ローカルのhoge.txtファイルを99.199.○○.○○のec2-userの$HOMEに転送する。鍵はhogeKey.pem
$ scp -i ~/.ssh/hogeKey.pem hoge.txt ec2-user@99.199.○○.○○:
ローカルのhogedirディレクトリを99.199.○○.○○のec2-userの$HOME/testdir/に転送する。
$ scp -i ~/.ssh/hogeKey.pem -rp hogedir/ ec2-user@99.199.○○.○○:testdir/
ただ、間違ったコマンドを実行したときにプロンプトにエラーメッセージも何も表示しなかった・・・
一方、リモートからローカルにファイルを取得する場合。
リモート99.199.○○.○○の$HOME/iii.txtファイルを取得(見づらいけど最後に. ドットがある)
scp -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○:~/iii.txt .
リモート99.199.○○.○○の$HOME/testdirディレクトリを、ローカルの$HOME/tmpディレクトリ下に取得
scp -i ~/.ssh/hogeKey.pem -rp ec2-user@99.199.○○.○○1:~/testdir ~/tmp/
■sshでリモート端末でコマンド実行
シェルスクリプトファイルをscp,sftpなどで転送し、そのスクリプトを実行する事も出来る。シェウスクリプと内でsudoでroot権限で実行する場合、-tオプションが必要。
$ ssh -t -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○ ./work/test_sh
■sftpでファイル転送
いんたらくてぃぶに頻繁にファイルをやりとりするなら、sshよりsftpの方が楽。ec2とのやりとりを下に書く(鍵はconfigに設定してある。ホスト名はdefault-ec2にしてある)
・セッション開始
$ sftp ec2-user@default-ec2
Connected to default-ec2.
sftp>
ファイル一覧
sftp> ls -l
移動
sftp> cd hogedir
ファイル取得
sftp> get hoge.tx
ローカルファイル一覧
sftp> lls
ローカルファイルのアップロード
sftp> put aiueo.txt
sftpの他の内部コマンド
ヘルプ
sftp>?
ローカル移動、lcd
ファイル名変更、rename ord new
ファイル削除、rm
パーミッション変更、chmod
めんどくせぇ
lpwd,pwd,mkdir,rmdir
sftpの大きな弱点はディレクトリごと転送できない。大量のファイルを一度に転送する場合、sryncを使う
■rsyncでファイル転送
rsyncは転送元と転送先のファイルを比較し差分を送信する事で、ネットワーク転送料を最小に抑える。従量課金のaws向き
rsync+sshの組み合わせがでふぉ。古いバージョンのrsyncでOpenSSHを使った転送するためには、クライアント側の環境変数RSYNC_RSHをsshにする。具体的には2.6.6以降のバージョンならデフォでsshを使うようになっているから、環境変数を指定する必要はない。
#bash
export RSYNC_RSH=ssh
前提として鍵は設定済み。configでリモートホスト名はdefault-ec2してある。
リモートの$HOME/work/remote.txtを取得
$ rsync ec2-user@default-ec2:work/remote.txt .
リモートの$HOME/work/remote.txtを取得して、ローカルのtodirに保存
$ rsync ec2-user@default-ec2:work/remote.txt todir/
リモートの$HOME/work/test_remote_dirディレクトリを取得して、ローカルのtodirディレクトリに保存する。-rはリカーシブル、-aはアーカイブモード
$ rsync -a -r ec2-user@default-ec2:work/test_remote_dir todir/
リモートの$HOME/workディレクトリをローカルのworkディレクトリと同期させる。
$ rsync -a ec2-user@default-ec2:work/ work/
-aはディレクトリの再帰的な転送を可能にするもので、同時にパーミッションや更新日時、シンボリックリンクも正しく複製する。これがアーカイブモード?
ちなみに、-uは更新モード。より新しいファイルが転送先にある場合、そのファイルを転送しない。-bはバックアップモード。転送先のファイルを上書きする場合、古いファイルのバックアップを作成する。
今度はローカル環境からの転送。
ローカル環境のlocal.txtをリモートのworkディレクトリ下に転送
$ rsync local.txt ec2-user@default-ec2:work
ローカル環境のtestdirディレクトリをリモートのworkディレクトリ下に転送
$ rsync -a testdir ec2-user@default-ec2:work
-vは冗長モード、-zは圧縮をしよう、-e "コマンド"は、sshの代わりに実行するコマンドを指定する
・scpとsftpの違い。軽快なscpか高機能なsftp,sshに向いているのは?
■ssh,scpでファイル転送
sshを使用したファイル転送scpコマンドについて。テスト台としてawsのec2にsshのポートだけ空けておく。また、鍵を~/.ssh/DefaultAWSKey.pemにおいておく。
ローカルのhoge.txtファイルを99.199.○○.○○のec2-userの$HOMEに転送する。鍵はhogeKey.pem
$ scp -i ~/.ssh/hogeKey.pem hoge.txt ec2-user@99.199.○○.○○:
ローカルのhogedirディレクトリを99.199.○○.○○のec2-userの$HOME/testdir/に転送する。
$ scp -i ~/.ssh/hogeKey.pem -rp hogedir/ ec2-user@99.199.○○.○○:testdir/
ただ、間違ったコマンドを実行したときにプロンプトにエラーメッセージも何も表示しなかった・・・
一方、リモートからローカルにファイルを取得する場合。
リモート99.199.○○.○○の$HOME/iii.txtファイルを取得(見づらいけど最後に. ドットがある)
scp -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○:~/iii.txt .
リモート99.199.○○.○○の$HOME/testdirディレクトリを、ローカルの$HOME/tmpディレクトリ下に取得
scp -i ~/.ssh/hogeKey.pem -rp ec2-user@99.199.○○.○○1:~/testdir ~/tmp/
■sshでリモート端末でコマンド実行
リモートのファイル一覧表示
$ scp -i ~/.ssh/hogeKey.pem -rp ec2-user@99.199.○○.○○ ls -l
リモートにファイル作成
$ ssh -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○ touch hoge.txt
リモートにある$HOME/work/test_shシェルを実行する
$ ssh -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○ ./work/test_sh
シェルスクリプトファイルをscp,sftpなどで転送し、そのスクリプトを実行する事も出来る。シェウスクリプと内でsudoでroot権限で実行する場合、-tオプションが必要。
$ ssh -t -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○ ./work/test_sh
■sftpでファイル転送
いんたらくてぃぶに頻繁にファイルをやりとりするなら、sshよりsftpの方が楽。ec2とのやりとりを下に書く(鍵はconfigに設定してある。ホスト名はdefault-ec2にしてある)
・セッション開始
$ sftp ec2-user@default-ec2
Connected to default-ec2.
sftp>
ファイル一覧
sftp> ls -l
移動
sftp> cd hogedir
ファイル取得
sftp> get hoge.tx
ローカルファイル一覧
sftp> lls
ローカルファイルのアップロード
sftp> put aiueo.txt
sftpの他の内部コマンド
ヘルプ
sftp>?
ローカル移動、lcd
ファイル名変更、rename ord new
ファイル削除、rm
パーミッション変更、chmod
めんどくせぇ
lpwd,pwd,mkdir,rmdir
sftpの大きな弱点はディレクトリごと転送できない。大量のファイルを一度に転送する場合、sryncを使う
■rsyncでファイル転送
rsyncは転送元と転送先のファイルを比較し差分を送信する事で、ネットワーク転送料を最小に抑える。従量課金のaws向き
rsync+sshの組み合わせがでふぉ。古いバージョンのrsyncでOpenSSHを使った転送するためには、クライアント側の環境変数RSYNC_RSHをsshにする。具体的には2.6.6以降のバージョンならデフォでsshを使うようになっているから、環境変数を指定する必要はない。
#bash
export RSYNC_RSH=ssh
前提として鍵は設定済み。configでリモートホスト名はdefault-ec2してある。
リモートの$HOME/work/remote.txtを取得
$ rsync ec2-user@default-ec2:work/remote.txt .
リモートの$HOME/work/remote.txtを取得して、ローカルのtodirに保存
$ rsync ec2-user@default-ec2:work/remote.txt todir/
リモートの$HOME/work/test_remote_dirディレクトリを取得して、ローカルのtodirディレクトリに保存する。-rはリカーシブル、-aはアーカイブモード
$ rsync -a -r ec2-user@default-ec2:work/test_remote_dir todir/
リモートの$HOME/workディレクトリをローカルのworkディレクトリと同期させる。
$ rsync -a ec2-user@default-ec2:work/ work/
-aはディレクトリの再帰的な転送を可能にするもので、同時にパーミッションや更新日時、シンボリックリンクも正しく複製する。これがアーカイブモード?
ちなみに、-uは更新モード。より新しいファイルが転送先にある場合、そのファイルを転送しない。-bはバックアップモード。転送先のファイルを上書きする場合、古いファイルのバックアップを作成する。
今度はローカル環境からの転送。
ローカル環境のlocal.txtをリモートのworkディレクトリ下に転送
$ rsync local.txt ec2-user@default-ec2:work
ローカル環境のtestdirディレクトリをリモートのworkディレクトリ下に転送
$ rsync -a testdir ec2-user@default-ec2:work
-vは冗長モード、-zは圧縮をしよう、-e "コマンド"は、sshの代わりに実行するコマンドを指定する