.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経由でリモートデスクトップに接続する
ターミナル上でssh host
あるいはssh host.example.com
リモートデスクトップでlocalhost:13389
に接続すると192.168.1.1に接続
リモートデスクトップで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 hostPS > 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.ps1PS > 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 > ctId Name PSJobTypeName State HasMoreData Location Command -- ---- ------------- ----- ----------- -------- ------- 1 Job1 BackgroundJob Running True localhost & ssh -C -N -f hostPS >
エイリアスも共有する OneDriveに共通のエイリアス定義をおいて複数のPCで共有する。
$profile
はC:\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 のシンボリック リンクが作成されました