.sshフォルダーをOneDriveに置く

OneDriveの直下に.sshフォルダーを設置する場合
フォルダーのシンボリックリンクを作成

1
2
C:\WINDOWS\system32>mklink /D C:\Users\ユーザ名\.ssh C:\Users\ユーザ名\OneDrive\.ssh
C:\Users\ユーザ名\.ssh <<===>> C:\Users\ユーザ名\OneDrive\.ssh のシンボリック リンクが作成されました

ssh-keygenでキーペアを作成する

ssh-keygenでキーペアを作成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PS > ssh-keygen -t rsa -b 4096 -f host-key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in host-key.
Your public key has been saved in host-key.pub.
The key fingerprint is:
SHA256:****************************************** user@host
The key's randomart image is:
+---[RSA 4096]----+
| o .. |
| o .. |
|.. E |
|. . . . |
| . + . S+. o |
|. o o *=*+= |
| . . .o+O=+. |
| =O+*= . |
| o=**+o+ |
+----[SHA256]-----+

.ssh/configのログイン設定

ssh-keygenで作成した公開鍵を接続先hostの.ssh/authorized_keysとして保存

OneDriveの.sshフォルダー内でhost.example.comフォルダーを作成しその中に秘密鍵host-keyを保存

1
2
3
4
5
6
7
8
#
# host.example.com
#
Host host host.example.com
HostName host.example.com
Port 10022
User myuser
IdentityFile ~.ssh/host.example.com/host-key

ここまで設定すればsshの基本操作は略名hostを使って、ポートやユーザ名指定なしで行える

  • shellアクセスやssh host
  • scpを使ったファイル転送scp host:~/remote_file.tst .

.ssh/configでPortforwardingを設定

host.example.comから接続可能なローカルホスト192.168.1.1と192.168.1.2に対してリモートデスクトップ接続を行う場合

LocalForwardを使ってPortforwardingを行う。
複数設定する場合は複数行設定すればいい。

1
2
3
4
5
6
7
8
9
10
#
# host.example.com
#
Host host host.example.com
HostName host.example.com
Port 10022
User myuser
LocalForward 13389 192.168.1.1:3389
LocalForward 23389 192.168.1.2:3389
IdentityFile ~.ssh/host.example.com/host-key

sshコマンドで同じことを実行するなら

1
ssh -L 13389:192.168.1.1:23389 55333:192.168.1.2:3389 myuser@host.example.com -p 10022

Portfowarding経由でリモートデスクトップに接続する

  1. ターミナル上でssh hostあるいはssh host.example.com
  2. リモートデスクトップでlocalhost:13389に接続すると192.168.1.1に接続
  3. リモートデスクトップでlocalhost:23389に接続すると192.168.1.2に接続

ただし、ターミナルを起動しておく必要があるので、sshはバックグラウンド実行する。

ssh -C -N -f host(-C:圧縮、-N:コマンド実行しない、-f:バックグラウンド)のようにオプションを組み合わせてバックグラウンドで実行するが、
Windows 10ではバックグラウンドにならないので、Start-Job { & ssh -C -N -f host }でバックグラウドジョブとして実行。

1
2
3
4
5
6
7
8
9
10
11
PS > Start-Job { & ssh -C -N -f host }

Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost & ssh -C -N -f host

PS > Get-Job

Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost & ssh -C -N -f host

このままだと長いのでエイリアスとして登録する

1
2
3
4
5
6
7
8
9
PS > New-Item -type file -force $profile

ディレクトリ: C:\Users\ユーザー名\Documents\WindowsPowerShell

Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/04/01 20:37 0 Microsoft.PowerShell_profile.ps1

PS > notepad $profile

エイリアス設定は以下。上記のジョブをctというコマンドで実行する。

1
2
function ConnectTunnel { Start-Job { & ssh -C -N -f host } }
Set-Alias ct ConnectTunnel

実行すると

1
2
3
4
5
6
7
PS > ct

Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost & ssh -C -N -f host

PS >

エイリアスも共有する

OneDriveに共通のエイリアス定義をおいて複数のPCで共有する。

$profileC:\Users\ユーザ名\Documents\WindowsPowerShellフォルダーに生成されるので、これをOneDrive上に置く。
現在作成されているファイルをOneDrive上に移動して、フォルダーをシンボリックリンクで置き換える。

1
2
mklink /D C:\Users\ユーザ名\Documents\WindowsPowerShell C:\Users\ユーザ名\OneDrive\WindowsPowerShell
C:\Users\ユーザ名\Documents\WindowsPowerShell <<===>> C:\Users\ユーザ名\OneDrive\WindowsPowerShell のシンボリック リンクが作成されました