【Mac】２段階認証sshの設定からVSCode-Insiderの利用まで

踏み台サーバーへのログインを目的の使用サーバーに簡単にログインする方法．踏み台サーバーをサーバー1，目的のサーバーをサーバー２とする． ターミナルは2つ使用するため，それぞれを1，２とする．

# 環境
- macOS Mojave 10.14.6

# 鍵の生成
以下のコマンドによりサーバー１の鍵を作成する．  

```bash:Terminal1
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 2048 -f /Users/Username/.ssh/keyname1
```
２点は適宜書き換え
- Username
- keyname1

以下のような表示が出るのでEnter×2(パスワードはなし)

```
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
```
すると鍵が生成される

```
Your identification has been saved in /Users/Username/.ssh/keyname1.
Your public key has been saved in /Users/Username/.ssh/keyname1.pub.
The key fingerprint is:
・
・
・
```

これで
- keyname1
- keyname1.pub

が生成されるので同様にサーバー２の公開鍵を作成する．

```bash:Terminal1
$ ssh-keygen -t rsa -b 2048 -f /Users/Username/.ssh/keyname2
```
- keyname2

これで
- keyname2
- keyname2.pub

が生成される．

# 鍵の配置と.ssh/config設定
ローカルからサーバー１に公開鍵を移動させる

```bash:Terminal1
$ cat keyname1.pub | ssh user@IP "mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys"
```
- keyname1
- user@IP

サーバー１のパスワードを聞かれるので入力する．

```
airi@133.9.66.202's password: 
```


vimでconfigを作成・編集する．

```Bash:Terminal1
$ touch config
$ vi config
```
以下のように書き込む．

```:.ssh/config
Host server1
Hostname IP1
User user
IdentityFile /Users/Username/.ssh/keyname1
```
- user
- Username
- server1
- IP1
- keyname1

これで以下のコマンドでサーバー１にログインできる

```
$ ssh humidai
```

ターミナルをもう1つ開いてサーバー１にログインして鍵を確認する．

```Bash:Terminal2
$ ssh humidai
$ cd .ssh
$ cat authorized_keys 
```

ssh-rsa...が入ってればok  
次のコマンドで鍵をサーバー１に送信する．

```Bash:Terminal1
$ scp keyname2.pub user@server1:/home/user/
```
- keyname2
- user
- server1

```Bash:Terminal2
$ cd ..
$ ls
```
これでkeyname2.pubが送信されてるかどうか確認できる．この鍵をサーバー２に送信したい．

```Bash:Terminal2
$ scp keyname2.pub user@IP2:/home/user/
```
- keyname2
- user
- IP2

パスワードが聞かれたらサーバー２のパスワードを答える  

次にサーバー２にログインし，鍵の移動を行う．

```Bash:Terminal2
$ ssh user@IP2
$ mkdir .ssh
$ cat keyname2.pub > ~/.ssh/authorized_keys
```
鍵の移動が終わったらvimでconfigを編集し，Hostを追加する．

```Bash:Terminal1
$ vi config
```
```:.ssh/config
Host server1
・
・
・
Host server2
Hostname IP2
User user
IdentityFile /Users/Username/.ssh/keyname2
ProxyCommand ssh humidai nc %h %p
```
- user
- Username
- server2
- IP2
- keyname2

これで以下のコマンドでサーバー２にログインできる．

```
$ ssh server2
```
- server2

これが終わったらサーバー１・２からkeyname2.pubを削除すること．

```
$ rm betelgeuse.pub 
```


# Minicondaのインストール

[Minicondaのインストール](https://docs.conda.io/en/latest/miniconda.html)  
公式サイトでMiniconda Linux 64-bitをダウンロードする．  

ダウンロードに保存した状態でサーバー２に送信する．パスは保存場所により適宜変更すること．

```
$ scp Downloads/Miniconda3-latest-Linux-x86_64.sh user@server2:/home/user
```
- user
- server2

送信後はファイルを実行する．

```Bash
$ ssh server2
$ bash Miniconda3-latest-Linux-x86_64.sh 
```
- server2

ひたすらエンター．以下の質問が出てきたらyesを答えれば良い．

```
Do you accept the license terms? [yes|no]
```
これにはそのままエンターでよかったはず．

```
Do you wish the installer to initialize Miniconda3
by running conda init? [yes|no]
[no] >>> 
```
次にpathの編集を行う．

```
$ vi .bashrc
```
ファイルの最後に以下を書き込む．

```.ssh/.bachrc
・
・
・
export PATH=/home/user/miniconda3/bin:$PATH
```
- user

これでcondaが反応すれば完了！

```
$ source .bashrc
$ conda
```

# Visual Studio Code Insiderの導入

### [参考にしたサイト](https://dev.classmethod.jp/etc/vs-code-remote-development-ec2/)

[Visual Studio Code Insiderをダウンロード](https://code.visualstudio.com/insiders/)

ダウンロードできたら拡張機能検索窓で`remote developmant`を検索し，インストール．これで必要な拡張機能が一括でダウンロードされる．

`Shift+Cmd+P`でコマンドパレットから`Remote-SSH: Connect to Host`を利用することで接続が可能.

# ファイルの送受信について

- ファイルの送信
    - `scp　ファイル名　送信先のアドレス：ファイルを保存するディレクトリ`
- ファイルの受信
    - `scp　とってくるところのアドレス：ファイル名　ファイルを保存するディレクトリ`