# ssh

## リモート設定

* \~/.ssh/configを以下のように設定する。

```
# 書き方
# Host <任意の名前>
#   HostName <接続先サーバーホスト名、あるいはIPアドレス>
#   User <ユーザ名>
#   Port <ポート番号>
#   IdentityFile <秘密鍵ファイル(必要ならば)>

# 具体例
Host sv100
  HostName 192.168.100.100
  Port 22
  User snakamura
  IdentityFile ~/.ssh/ssh_keys/id_rsa_snakamura
```

* これで以下で192.168.100.100に接続できるようになる。

```
# $ ssh <任意の名前>
$ ssh sv100
```

## ポート転送設定

* 踏み台サーバーを経由した接続に、localhostのポートの転送設定をする。
* \~/.ssh/configを以下のように設定する。

```
# 書き方
# Host <任意の名前>
#   HostName <踏み台サーバーホスト名、あるいはIPアドレス>
#   User <ユーザ名>
#   Port <ポート番号>
#   IdentityFile <秘密鍵ファイル(必要ならば)>

#   LocalForward <ローカルのポート番号> <踏み台サーバから見える転送先アドレス>:<転送先ポート番号>

# 具体例
Host sv100
  HostName 192.168.100.100
  Port 22
  User snakamura
  IdentityFile ~/.ssh/ssh_keys/id_rsa_snakamura

  LocalForward 1022 192.168.200.101:22
```

* まず、転送設定を以下のオプションで実行し、バックグラウンド稼働させる。
  * f がバックグラウンド
  * N がリモートコマンドなし
  * さらに C を付与すると、圧縮転送となる。

```
$ ssh <任意の名前> -N -f
```

* これで以下で192.168.200.101に接続できるようになる。

```
# $ ssh <ユーザ名>@localhost -p <ローカルのポート番号>
$ ssh snakamura@localhost -p 1022
```

* 以上の例は、ssh接続の時のものだが、転送先ポート番号に22以外のものを割り当てても良い。
  * 以下が実例
    * Windows Remote Desktop(RDP) ... 3389
    * Jupyter ... 8888
* 転送を切りたい場合は、psでプロセスを探して、

```
$ ps
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
      730     683     730       1892  pty0      197609 11:00:13 /usr/bin/ps
      665       1     665      19764  ?         197609 10:56:24 /usr/bin/ssh
      683     682     683      22300  pty0      197609 10:57:01 /usr/bin/bash
      682       1     682      16468  ?         197609 10:57:01 /usr/bin/mintty
```

* sshというやつを落とせばよい。

```
$ kill -9 665
```

* WindowsでPC起動と同時にやっておきたい場合は、以下のようなvbsスクリプトをタスクスケジューラに設定する。
  * objWShell.runは、複数書いてもOK

```
Set objWShell = CreateObject("Wscript.Shell") 
objWShell.run "ssh <任意の名前> -N -f", vbHide
objWShell.run "ssh <任意の名前> -N -f", vbHide
```

## RemoteForward

* local以外でも転送できるようだ。コンテナ間ではうまく転送できなかった。
  * https://qiita.com/shuma/items/6b9d0127840f08398126
  * https://linuxize.com/post/how-to-setup-ssh-tunneling/#remote-port-forwarding

## 共通鍵認証の設定

* キーペアを作成する。
* ログイン予定のユーザの`~/.ssh/authorized_keys`に、共通鍵`.pub`の内容を追加書き込みする。
* 同時に権限等を修正する。

```
scp ./hoge_rsa.pub user@host:~/.ssh/
cd ~
chmod 700 .ssh
cd .ssh
cat hoge_rsa.pub >> authorized_keys
chmod 600 authorized_keys
rm -fv hoge_rsa.pub
```

* `/etc/ssh/sshd_config`の以下を有効化する

```
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys
```

* 同時にパスワード認証を無効化したりrootログインを無効化するユースケースが多い。

```
PermitRootLogin no
PasswordAuthentication no
```

* 参考
  * https://qiita.com/gotohiro55/items/36a22516de2b381b3c6e

## 参考

* SSHによるポートフォワーディング
  * https://blue-red.ddo.jp/\~ao/wiki/wiki.cgi?page=SSH%A4%CB%A4%E8%A4%EB%A5%DD%A1%BC%A5%C8%A5%D5%A5%A9%A5%EF%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0
* SSHポートフォワーディングを知った話
  * https://qiita.com/Ayaka14/items/449e2236af4b8c2beb81
* 【SSH】踏み台サーバーを経由した多段SSH接続のやり方（.ssh/configの利用）
  * https://serip39.hatenablog.com/entry/2020/12/18/235800
