【お知らせ】



この設定は、trump-method に plink や pscp を使う場合には不要です。 plink や pscp を使う場合のパスフレーズの管理には、PuTTY 付属の Pageant を利用してください。



<2012/09/23 追記>
2ch NTEmacsスレッド3 で、win-ssh-agent.exe というものがある情報の紹介がありました。このソフトを使う場合、ここで紹介している設定はすべて不要となります。
ただし、共存もできますので、ベストな環境を選択して、ご利用ください。

<2012/09/23 追記>
2ch NTEmacsスレッド3 で、ssh-pageant.exe というものがある情報の紹介がありました。このソフトにも対応できるようにスクリプトの見直しを行いました。

【本題】


以下は設定例です。適当に自分の環境に合うように調整してください。

<作業手順>
0) ssh-keygen.exe を使って鍵を作成し、接続するサーバに公開鍵を登録する。この場合、パスフレーズを利用することが、今回の前提。
  ssh-pageant.exe を使う場合は、PuTTY 付属の Pageant と連携するので、そちらで鍵の管理をする。
  ※ ssh-keygen.exe で作成した秘密鍵を Pageant に取り込むには、PuTTYgen でインポートして変換するする必要がある。
   このときに、PuTTY 付属の PuTTYgen では変換できない(エラーが出る)場合があるので、その場合は WinSCP 付属の PuTTYgen を使うこと。
    http://kakikake2.wordpress.com/2012/03/18/ssh-key-generate-2/
   Pageant も WinSCP に付属しているが、こちらは PuTTY 付属のものを使った方がよい。PuTTY 付属のものは、鍵の照会確認のダイアログがでる機能があるなど、
   セキュリティ対策機能を持ったものとなっている。
1) ホームディレクトリに binディレクトリを作成する。( mkdir ~/bin )
2) 1) で作成した binディレクトリを PATH の先頭に設定する。( export PATH=~/bin:$PATH のようなこと )
  ※ Emacs が起動する前に設定する必要がある。gnupack の場合、config.ini で設定可能。その場合は、PATH = %INST_DIR%\home\bin;%PATH% とする。
3) 1) で作成した binディレクトリに次のファイルを作成する。

~/bin/ssh-agent.sh ← ssh-agent.exe を使う場合に必要
if [ -z "$SSH_AGENT_PID" -o -z "$SSH_AUTH_SOCK" ]; then
    ps | grep -q 'ssh-agent$'

    if [ $? -eq 0 ]; then
	source /tmp/ssh-agent.rc
    else
	ssh-agent -s | grep -v '^echo' > /tmp/ssh-agent.rc
	source /tmp/ssh-agent.rc
	ssh-add
    fi
fi

~/bin/ssh-pageant.sh ← PuTTY 付属の Pageant を使う場合に必要。また、~/bin に ssh-pageant.exe も格納しておくこと。(https://github.com/cuviper/ssh-pageant/downloads
if [ -z "$SSH_PAGEANT_PID" -o -z "$SSH_AUTH_SOCK" ]; then
    ps | grep -q 'ssh-pageant$'

    if [ $? -eq 0 ]; then
	source /tmp/ssh-pageant.rc
    else
	ssh-pageant -s -q > /tmp/ssh-pageant.rc
	source /tmp/ssh-pageant.rc
    fi
fi

~/bin/ssh-setup.sh ← 上記の2つのシェルスクリプトのどちらを使うかを切り替えるスクリプト
source ssh-agent.sh
# source ssh-pageant.sh

~/bin/ssh
#!/bin/sh

source ssh-setup.sh
/usr/bin/ssh "$@"

~/bin/scp
#!/bin/sh

source ssh-setup.sh
/usr/bin/scp "$@"

~/bin/rsync
#!/bin/sh

source ssh-setup.sh
/usr/bin/rsync "$@"

~/bin/slogin ※ tramp では使わないけど、コマンドラインから使う時のために追加
#!/bin/sh

source ssh-setup.sh
/usr/bin/slogin "$@"

~/bin/sftp ※ tramp では使わないけど、コマンドラインから使う時のために追加
#!/bin/sh

source ssh-setup.sh
/usr/bin/sftp "$@"

4) 上記の2番目以降のシェルスクリプトに、必要であれば実行権を付ける。( gnupack with Cygwin 11.00 の環境では不要 )

以上の設定により、NTEmacs から ssh系コマンドを使う際、パスフレーズの入力を省略できるようになります。(ssh-agent を使う場合は、一回入力が必要。)
また、shell から ssh系コマンドを同様に利用することも可能です。この場合には、コマンドを利用始める前に、source ssh-setup.sh を実行するのが良いと思います。
(source ssh-setup.sh を実行しなくても機能に影響はありませんが、実行することにより shell上に環境変数が定義され、/tmp/ssh-*.rc ファイルへのアクセスが行われなくなります。)
source ssh-setup.sh を .bashrc に書くのもよいと思います。


<変更履歴>
  • 2012/09/21 ~/bin/ssh-agent は不要だったので、整理した。
  • 2012/09/21 ssh_agent -s が出力する echoコマンドを削除して、ファイルに出力するようにした。
  • 2012/09/22 tramp からは使わないけど、slogin スクリプトも追加した。
  • 2012/09/23 tramp からは使わないけど、sftp スクリプトも追加した。
  • 2012/09/24 ssh-pageant の利用にも対応した。


最終更新:2019年10月31日 22:23