OpenSSHに関するあれこれ
English Version
- OpenSSH <--> SSH2 で agent 転送が効かない
OpenSSH と SSH2(SSH Secure Shell Version 2 以降のもの) との間では、(Protocol 1 では可能であるのに)
agent 転送が効ません。何とかならないんだろうか?
というわけで、むりやり agent 転送を行わせる patch を作ってみました。
draft-ietf-secsh-agent-02.txt(Internet Draft)対応版
Internet Draft に書いてある部分だけなので LICENSE には問題ないはず。
古い版
-
openssh-3.7.1p2-fwd_agent-client-0.75.patch.bz2
OpenSSH から SSH2 へ agent 転送を行わせる patch です。
ただし、agent 転送のための socket を作らせるだけなので、
SSH2 client では agent 転送は使えません。
しかし、server は一般ユーザーではどうにもならなくても、OpenSSH の client を
いれることは多分可能なので、OpenSSH の client を使えば agent 転送が有効になります。
この場合、設定される環境変数が SSH2_AUTH_SOCK なので、これと同じ値を
SSH_AUTH_SOCK にも設定しましょう。
また、この設定をすれば、ssh1 とかでも agent 転送が有効になります。
-
openssh-3.7.1p2-fwd_agent-server-0.75.patch.bz2
こっちは逆に SSH2 から OpenSSH へ agent 転送を行わせる patch です。
やっぱり agent 転送のための socket を作らせるだけなので、
OpenSSH client では agent 転送は使えませんが、agent 転送の元の ssh-agent
が OpenSSH のものであれば使えます。
実際には openssh-3.7.1p2-fwd_agent-agent-0.75.patch.bz2 を手元の client
にあてて、ssh2 を用いている firewall の向こう側の server
に使うことを意図しています。
また、これはサーバー側の patch なので、root 権限が無いと意味がありません。
root 権限があるマシンで使いましょう。
-
openssh-3.7.1p2-fwd_agent-agent-0.75.patch.bz2
SSH2 へ agent 転送が出来るようにする patch(不完全)。
とはいえ agent 転送で最低限必要な部分は出来ています。
不完全な部分は SSH2 で拡張された部分(転送経路制御等)です。
ただし、SSH2 の LICENSE に reverse engineer するな、とあり、
扱いに注意がいるかも知れない。
- fingerprint を指定して agent から鍵を削除
ssh-add に fingerprint を指定して agent から鍵を削除するオプションを付ける
patch を作って見ました。
openssh-5.4p1-ssh-add.patch.bz2
元の ssh-add は、公開鍵ファイルがないと agent から鍵を削除できません。
公開鍵ファイルがなくても agent から鍵を削除できると便利かな、と思って patch を
作って見ました(役に立つ機会はそんなにないと思いますが)。
例) ssh を使って login した先で鍵を追加して logout したが、
その鍵を削除したい時、等
使い方は、ssh-add -r fingerprint です。
- OpenSSH --> SSH2 で scp 出来ない可能性
remote 側が SSH2 Only しかインストールされていないと、
% scp foo bar:
scp: warning: Executing scp1 compatibility.
scp: FATAL: Executing ssh1 in compatibility mode failed (Check that scp1 is in your PATH).
lost connection
とかなって、scp 出来ません。
この場合でも SSH2 の側からなら scp 出来ます。
素直に remote 側に scp1 を入れるか、sftp でも使うか、remote 側で scp 使うしかないようです。
openssh-5.4p1-scp2-20100322.patch.bz2
上記の問題に対処するために scp の file 転送で sftp の protocol で接続できるようにする patch を作って見ました。
-L [!]host[,...] で '!' を付けない host には sftp 、'!' を付けた host には scp を使うように強制します。
これは、環境変数 SCP_USE_SFTP_HOSTS に設定しておくこともできます。
また、-s を付けると、sftp を使う方を default にします。
sftp を使った場合、-l option の帯域制限は効かなくなります。
不具合が残っているかもしれないので使用する際は注意して下さい。
- OpenSSH --> SSH2 Private Key converter
OpenSSH の Private Key (秘密鍵) を SSH2 の Private Key に変換する option を ssh-keygen に
追加する patch
openssh-5.4p1-keyconv_private-20100322.patch.bz2
test 版 agent 転送 patch を作った際の副産物です。
使い方は、ssh-keygen -z [-f keyfile] です。
変換後の passphrase の設定されていない SSH2 Private Key が標準出力に書き出されます。
Ralph Gessner 氏提供の OpenBSD 版
を Ver.5.2 に対応させたもの
openssh-5.4-keyconv_private-20100322.patch.bz2
passphrase 付きのまま変換したかったり、変換に失敗した場合は、上記の
むりやり agent 転送を行わせる patch テスト版
に含まれる ssh-keygen を試して見て下さい。
おまけ
original の ssh-keygen で変換できない ssh2 用 Private Key ができてしまいました。
id_rsa_1024_a
- sftp のコマンドラインに補完機能を追加する patch
libedit を使って sftp のコマンドラインに補完機能を追加する patch(本家に追加されたのでもう必要無)
openssh-5.2p1-sftp_completion-20090308.patch.bz2
configure 実行時に --with-libedit に加え、 --with-libedit-sftp-completion を追加して下さい。
sftp 用に .editrc で設定できる補完用 command に complete(tab)、possible-completions(M-?)、
delete-char-or-list-or-eof(^d)、delete-char-or-list、complete-local-filename(M-/)、
possible-local-filename-completions(^x /)、complete-remote-filename(M-\)、possible-remote-filename-completions(^x \)
があります。()内の key をデフォルトで割り当ててあります。
(M-[3~ も em-delete-or-list に割り当ててありますが、内部で使っているので、これの変更は自己責任で。)
- ssh-agent 簡易 lock tool
ssh-agent の lock を xlock と同期させるための簡易 tool
ssh-agent-locker.tar.bz2
- subversion レポジトリ
リポジトリのルート: http://svn.phys98.homeip.net/openssh/
作者の連絡先はこちら
ide@phys98.homeip.net
戻る
最終更新日 Monday, 22-Mar-2010 23:40:00 JST