GitHub使ってますよね!
一度使い始めると当たり前に使っているのですが、毎回調べてしまうことがSSHの使い方。 コマンドの流れはGitHubの方を参照すればわかるのですが、それぞれの意味やそれに伴いできるファイルが何なのか一度整理してみました。
- SecureShellの略。Secureな通信を行うためのプロトコル。
- 公開鍵認証という仕組みを用いて、セキュアな通信を実現している。
-
SSHでリモートホストに接続してコマンドを実行する。
-
基本の使い方:
ssh ユーザ名@接続先のホスト名(IPアドレス)
-
sshコマンドを実行しているユーザ
=ログインするユーザ
の場合、ユーザ名は省略できる。 -
オプション
- -A: 接続先でも秘密鍵の情報が引き継がられる。
- -a: 接続先に秘密鍵の情報を引き継がない
- -C: データを圧縮
- -c: 暗号方式を指定
- -i: 使用する秘密鍵を任意に指定できる。指定しない場合~/.ssh/id_rsaを見に行く。
- -T: 仮想端末の割り当てを禁止(ssh -vTなどで接続確認に使う)
- -v: デバッグする(verboseモードでログを出力する)
- -f: SSh先でコマンドを実行した後に、バックグラウンドへと潜る
- -N: シェルを起動しなくなる(SSH先で何のコマンドも実行しない)
- -L: トンネルを掘る
ssh -L (ローカルで使用するポート):(目的サーバのアドレス):(目的サーバで待ち受けてるポート番号)
- 公開鍵認証方式で使用するキーペア(公開鍵と秘密鍵)を生成する。
- SSHの秘密鍵を保持し、SSHクライアントの依頼に応じて秘密鍵の処理を行うためのプログラム
- OpenSSHはssh-agent, Windows用はPuttyのPagentなどがある。
- これらを起動しておくことで、SSH クライアントはパスフレーズの入力を省略してリモートへのアクセスが可能となる。
+-----------+
| SSH agent | (秘密鍵を保持)
+-----------+
^
| clientは秘密鍵の処理を依頼, agentは処理結果を返す
v
+------------+ 公開鍵認証 +------+
| SSH client | <-------------------> | sshd |
+------------+ +------+
- ssh-agentが動作しているか確認
- 秘密鍵の登録(-d: 削除, -l: 一覧)を行う
SSH接続の情報を定義するファイル。
# 次のHostキーワードが現れるまでの項目を1つの設定とする。
# *, ?などのワイルドカードがつかえる。
# ここでは、exampleがコマンドラインで使う設定名になる。
Host example
Hostname example.net # ホスト名
Port 30022 # ポート番号
User non117 # ユーザ名
IdentityFile ~/.ssh/example_key # 秘密鍵のファイルへのパス
一度接続したことのあるサーバのSSHサーバ証明書が格納される。
接続を許可する複数の公開鍵を登録するサーバー側のファイル。 既存の情報を消してしまわないように追加モードで書き込む事。
- 特定のポート番号に届けられた通信を、特定のIPアドレス、ポート番号に転送する仕組み
$ ssh -L 1234:db1:5678
: ローカルの1234ポートにアクセスすると、DB1の5678ポートにアクセスできる- SSH通信の中を通してすべてやってるからトンネル
- OpenSSHでは~/.ssh/内のファイルがモード600(ユーザーのみ読み書き可能)でないと使用できない。
- 仕事用とプライベートの記述を分ける(~/.ssh/configに複数の設定を記述)
- Githubで特定のpull requestをローカルに持ってくる
git fetch origin pull/ID/head:BRANCHNAME
- トンネリング