ネットワーク
SSH・scp・rsync
別のマシンにログインする ssh、鍵の作成、ファイルを送る scp と rsync、~/.ssh/config の書き方。
ssh別のマシンにログインする
ネットワーク越しに別のマシンにログインして操作します。
$ ssh [email protected]
$ ssh -p 2222 [email protected] # ポートを指定
$ ssh -i ~/.ssh/work_key user@host # 鍵を指定
$ ssh user@host 'df -h' # 1つのコマンドだけ実行して戻る
$ ssh -L 8080:localhost:80 user@host # ローカルの8080 → 相手側の80(ポート転送)
$ ssh -R 9000:localhost:3000 user@host # 相手側の9000 → 手元の3000
$ ssh -D 1080 user@host # SOCKSプロキシ
$ ssh -J bastion user@internal # 踏み台を経由ssh-keygen鍵を作る
SSH のログインに使う鍵(公開鍵と秘密鍵)を作ります。
$ ssh-keygen -t ed25519 -C "[email protected]" # 新しい鍵(~/.ssh/id_ed25519)
$ ssh-keygen -t ed25519 -f ~/.ssh/work_key # 名前を付けて作る
$ ssh-keygen -lf ~/.ssh/id_ed25519.pub # 指紋を表示
$ ssh-keygen -R example.com # known_hosts から古い記録を消すssh-copy-id公開鍵を相手に登録する
自分の公開鍵をサーバーに登録して、パスワードなしでログインできるようにします。
$ ssh-copy-id [email protected]
$ ssh-copy-id -i ~/.ssh/work_key.pub -p 2222 user@hostこれで次回からパスワードなしでログインできます。
~/.ssh/config — 接続先に名前を付ける
Host vps
HostName 194.0.2.10
User alice
Port 22
IdentityFile ~/.ssh/id_ed25519
Host github.com
IdentityFile ~/.ssh/github_key
Host *
ServerAliveInterval 60$ ssh vps # 上の設定で接続
$ scp file.txt vps:~/ # scp や rsync でも名前が使えるssh-agent / ssh-addパスフレーズを毎回打たない
鍵のパスフレーズを覚えさせて、毎回入力しなくて済むようにします。
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_ed25519
$ ssh-add -l # 登録中の鍵scpファイルをコピーする
SSH を使って、ほかのマシンとファイルをコピーします。
$ scp report.pdf user@host:~/docs/
$ scp user@host:/var/log/app.log .
$ scp -r site/ user@host:/srv/www/
$ scp -P 2222 file user@host:~ # ポートは大文字の -Prsync差分だけ効率よく同期する
変わった部分だけを効率よくコピーして、フォルダを同期します。バックアップの定番です。
| オプション | 意味 |
|---|---|
-a | 権限・日時・リンクを保って再帰的に(ほぼ必須) |
-v / -h | 詳しく表示 / サイズを読みやすく |
-z | 通信を圧縮 |
-P | 進捗表示と、途中からの再開 |
-n | 実際には何もせず、何が起きるかだけ表示(dry run) |
--delete | コピー元にないファイルをコピー先から消す |
--exclude | 除外する |
-e 'ssh -p 2222' | ssh のオプションを指定 |
$ rsync -avh src/ backup/ # ローカルで同期
$ rsync -avzP site/ vps:/srv/www/site/ # サーバーへ
$ rsync -avz vps:/var/log/nginx/ ./logs/ # サーバーから
$ rsync -avn --delete src/ dst/ # まず dry run で確認
$ rsync -av --delete --exclude node_modules --exclude .git ./ vps:~/app/