はじめに
会社から支給されているPCがWindowsなので、Windowsで使えるSSH Clientツールを使っている。
普段はRLoginを使っているのだが、Windows Terminalを使ってみたくなった。
RLoginからはPPKファイルを使ってSSHエージェント転送をしているので、Windows Terminalでも同様に秘密鍵のファイルを使ってSSHエージェント転送できるようにしたいが、初めてやるのでやり方が分からなかった。
これはやり方を調べて実践した時の記録。
環境
- OS
- windows10 バージョン 20H2 (OS ビルド 19042.2251)
- Git
- 2.37.3.windows.1
- bash
- 5.1.16(1)-release (x86_64-pc-msys)
Microsoft Windows [Version 10.0.19042.2251] (c) Microsoft Corporation. All rights reserved. C:\Users\masaharu.suizu>winver
$ git --version git version 2.37.3.windows.1 $ bash --version GNU bash, version 5.1.16(1)-release (x86_64-pc-msys) Copyright (C) 2020 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
準備 (PPK形式 -> Open SSH形式)
- Open "PuTTYgen"
- "Conversions" → "Import key" → Select xxx.ppk file
- Enter passphrase
- "Conversions" → "Export OpenSSH (force new file format)" → Save it as "id_rsa"
- "id_rsa" fileの中身を確認
-----BEGIN OPENSSH PRIVATE KEY----- ... ... ... ... -----END OPENSSH PRIVATE KEY-----
sshしてみる
$ ssh-agent bash $ ps <- ssh-agentが立ち上がったかプロセスを確認 $ ssh-add -l $ SSH_USER='user' $ SSH_HOST='hoge' $ SSH_PRIVATE_KEY='path/to' $ ssh-add ${SSH_PRIVATE_KEY} $ ssh -A ${SSH_USER}@${SSH_HOST}
.bashrcとかを活用しなければ上記の手順を毎回踏む必要がある。 毎回この手順を踏むのは面倒臭いので、少し工夫する。
少し工夫してssh
諸々の設定ファイルを編集
- Open Windows Terminal > Git bash
Make config file for ssh
$ vim ~/.ssh/config
Host * ServerAliveInterval 60 Host hoge.fuga HostName hoge.fuga User masaharu ForwardAgent yes
Edit .bash_profile
$ vim ~/.bash_profile
mkdir -p /tmp/`date +%Y%m%d` SSH_AGENT_FILE="/tmp/`date +%Y%m%d`/.ssh-agent" test -f "${SSH_AGENT_FILE}" && source "${SSH_AGENT_FILE}" if ! ssh-add -l > /dev/null 2>&1; then # Pleaes set file path SSH_PRIVATE_KEY="xxx" ssh-agent > "${SSH_AGENT_FILE}" source "${SSH_AGENT_FILE}" ssh-add "${SSH_PRIVATE_KEY}" fi
※ 色々な書き方ができそう。
再度ssh
- Open Windows Terminal > Git bash
(初回は入力が必要) Please input your private key pass passphrase
Agent pid 51 Enter passphrase for /c/Users/masaharu.suizu/.ssh/id_rsa: Identity added: /c/Users/masaharu.suizu/.ssh/id_rsa (/c/Users/masaharu.suizu/.ssh/id_rsa)
Execute ssh command
$ ssh hoge.fuga
SSH_AGENT_FILE="/tmp/`date +%Y%m%d`/.ssh-agent"
のファイルだけを消してしまうと無駄なプロセスが残ってしまうので注意。
さらに工夫
sshコマンドに対して補完機能を準備してあげると更に使い勝手が良くなりそう。
declare -a SERVER_LIST=($(grep 'HostName' ~/.ssh/config | awk {'print $2'})) _ssh_completion(){ local args=$(echo ${SSH_SERVER_LIST[@]}) COMPREPLY=( `compgen -W "${args}" -- ${COMP_WORDS[COMP_CWORD]}` ); } complete -F _ssh_completion ssh