#author("2021-12-15T20:54:13+09:00","default:nobuoki","nobuoki") #author("2021-12-15T20:54:38+09:00","default:nobuoki","nobuoki") * はじめに [#h47c1e9e] $HOME/.ssh/confg で多段sshのconfigは作れるが、Windows10標準sshではやったことないぞ、という人向けのメモです 「どうせ同じだろ?」とか思ってると些細なところで意外とハマります - 2021/02/20 ~/.ssh/config 変換コマンドの修正 - 2021/02/19 ~/.ssh/config 変換コマンドを見直し(WSL対応) - 2021/12/15 2>dev/null 追記、全部入り変換手順を追記 - 2021/12/15 NUL、全部入り変換手順を追記 ** sshが使えるか確認 [#k9d66e78] コマンドプロンプトで ssh -V や where ssh とかしてみるのが良いです #ref(./0720-02.png, 75%) もし見つからない、エラーが出る場合は openssh client のインストールをしましょう - [[Windows10 に OpenSSH インストール - Qiita>https://qiita.com/sigenyan/items/1de0b74541f5cef7614f]] * ssh-agent を使えるようにする [#we4ba40a] サービス ssh-agent を有効にし、起動する - [[Windows 10のssh-agentをコマンド プロンプト、WSL、Git Bashで使ってみた - Qiita>https://qiita.com/q1701/items/3cdc2d7ef7a3539f351d]] 秘密鍵のパーミッションを適切にする(≒ %userprofile%\.ssh\ に秘密鍵ファイルを直置きするか symlink を張る) - [[Windows版VSCodeで秘密鍵の位置に関係なくSSHログインするには - Qiita>https://qiita.com/mindwood/items/ddae674a0694402f22a6]] * 必要に応じて ~/.ssh/config の ProxyCommand を見直す [#i886a3e0] sshコマンドを使って多段する場合(大抵はそうなると思いますが)の ProxyCommand ssh -W %h:%p gateway 2>/dev/null ここの ssh コマンド部分はフルパスで指定しておくのが無難です - [[Windwos10でssh ProxyCommandの多段SSHの設定 - suzu6>https://www.suzu6.net/posts/205-ssh-config-proxycommand-windows10/]] ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -W %h:%p gateway 2>/dev/null 既に WSL/msys2 等で config を作成している場合はこんな感じで変換してしまうのが楽です #prism(bash){{{ # パス変換コマンド判別 if type wslpath >/dev/null 2>&1; then CMD=wslpath; elif type cygpath >/dev/null 2>&1; then CMD=cygpath; fi # バックアップ取得後に ~/.ssh/config を変換 CONF=$("$CMD" "${APPDATA%\\AppData*}"/.ssh/config) [ -f "$CONF" ] && cp "$CONF" /tmp/ sed 's/ProxyCommand ssh/ProxyCommand C:\\Windows\\System32\\OpenSSH\\ssh.exe/' <~/.ssh/config >"$CONF" }}} ** pingコマンド差分 [#mc2c4ffa] Match Host セクションで使うことが多いと思いますが、 ping コマンドは 回数(-c)、タイムアウト(-W)など、LinuxとWindowsで差分があるので必要に応じて変換します さらに ping の出力を捨てておくと良いかもしれません 具体的には ping コマンドの末尾に >NUL を追加します Linux #prism(bash){{{ Match Host rasp* Exec "ping -c1 -W1 192.168.10.162" HostName 192.168.10.162 Match Host rasp* HostName 192.168.10.159 }}} Windows #prism(bash){{{ Match Host rasp* Exec "ping -n 1 -w 1 192.168.10.162 >NUL" HostName 192.168.10.162 Match Host rasp* HostName 192.168.10.159 }}} 変換例 #prism(bash){{{ sed 's/-c1 -W1/-n 1 -w 1/' | perl -pe 's/"\s*$/ >NUL$&/ if /ping/' }}} 全部入りの手順 #prism(bash){{{ # パス変換コマンド判別 if type wslpath >/dev/null 2>&1; then CMD=wslpath; elif type cygpath >/dev/null 2>&1; then CMD=cygpath; fi # バックアップ取得 CONF=$("$CMD" "${APPDATA%\\AppData*}"/.ssh/config) [ -f "$CONF" ] && cp "$CONF" /tmp/ # ~/.ssh/config を変換(3行を一気にコピペ) sed 's/ProxyCommand ssh/ProxyCommand C:\\Windows\\System32\\OpenSSH\\ssh.exe/' ~/.ssh/config | sed 's/-c1 -W1/-n 1 -w 1/' | perl -pe 's/"\s*$/ >NUL$&/ if /ping/' >"$CONF" }}} * 備考 [#odd5037a] ** -f オプションが変 [#r6a5f462] 変というか、、、sshコマンドを入力後、プロンプトが返らずに固まったようになります (4s後に Enter→固まる/15sec後に Ctrl+C で停止) #youtube(VkHXJQU_oFE) なんとかしてバックグラウンドで起動したい場合、 start コマンドを使って ssh のウィンドウを最小化してしまうと邪魔にならなくて良いかも start /min ssh -vNL 8080:192.168.33.1:8080 remotepc.gateway 終了するときは ssh のウィンドウを開き、Ctrl+C します