# SSHの使い方

- telnet + 暗号化
- Secure Shellの略

[SSHとは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word11722.html)

## SSHポートフォーワーディング

- 中継サーバーを用いて他のサーバーにsshする技術
- 直接アクセスできないサーバーなどに踏み台サーバーを使用してsshするときなどに使う
- ローカル<->中継サーバーは暗号化されているが、中継サーバー<->目的サーバーは暗号化されていない

[SSHポートフォワーディングを知った話 - Qiita](https://qiita.com/Ayaka14/items/449e2236af4b8c2beb81)  
[楽しいトンネルの掘り方(オプション: -L, -R, -f, -N -g) — 京大マイコンクラブ (KMC)](https://www.kmc.gr.jp/advent-calendar/ssh/2013/12/09/tunnel2.html)

\# ローカルからリモート
ssh <中継ip> -L <ローカルポート>:<目的ip>:<目的ポート> -N

# リモートからローカル
ssh <元ip> -R <元ip>:<目的ip>:<目的ポート> -N

## sshコマンドオプション

- N: ssh先のシェルを開かない。ポートフォワーディングの中継サーバーのシェルを起動したくないときに使用する。
- f: sshをバックグラウンドプロセスにする。
- g: ローカルフォーワードしたトンネルポートに外部ホストからのアクセスを許可する
- v: デバッグメッセージを表示する（verbose mode）。**デバッグ時は非常に有用**
- i: 接続に使用する秘密鍵を指定する
- t: ssh実行時に模擬端末を割り当てることができる([sshで踏み台経由時のショートカット - Qiita](https://qiita.com/hatt0519/items/62686784a51ad54b6ac7))

[楽しいトンネルの掘り方(オプション: -L, -R, -f, -N -g) — 京大マイコンクラブ (KMC)](https://www.kmc.gr.jp/advent-calendar/ssh/2013/12/09/tunnel2.html)  
[【 ssh 】コマンド――リモートマシンにログインしてコマンドを実行する：Linux基本コマンドTips（80） - ＠IT](https://www.atmarkit.co.jp/ait/articles/1701/26/news015.html#opt)

### iオプションの省略

- iオプションでの秘密鍵の指定はデフォルトで`~/.ssh/id_rsa`を見てくれる
- すなわち以下は等価である

ssh -i ~/.ssh/id\_rsa example.com
ssh example.com

## ssh keyの作成

ssh-keygen -t rsa -b 4096 -C “コメント”

[お前らのSSH Keysの作り方は間違っている - Qiita](https://qiita.com/suthio/items/2760e4cff0e185fe2db9#%E6%96%B0%E3%81%97%E3%81%84ssh-key%E3%81%AE%E4%BD%9C%E6%88%90)\]

- コマンド実行後に鍵の名前を聞かれる
- デフォルトでは`$HOME/.ssh/id_rsa`に秘密鍵が、`$HOME/.ssh/id_rsa.pub`に公開鍵が作成される

## sshサーバーの準備

- sshを受け入れる側をsshサーバーと言う
- sshサーバーは認証に使用される公開鍵を`$HOME/.ssh/authorized_keys`に書いておく必要がある

## エラー対応

### `Bad remote forwarding specification`

- sshトンネルのオプションの順番が違うと出る
- `ssh -i <pem file> mid-host -R <local-port>:<target-server-address>:<target-port>`が正しい順番
- それ以外の順番だと出るっぽい

### `Permission denied (publickey,gssapi-keyex,gssapi-with-mic)`

- iオプションで指定したkeyのファイル名が違うときに出た

## 参考

- [authorized\_keys — 京大マイコンクラブ (KMC)](https://www.kmc.gr.jp/advent-calendar/ssh/2013/12/13/authorized-keys.html)
