チケット #45653

PuTTY 0.78

登録: 2022-09-16 17:40 最終更新: 2023-07-02 21:54

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
(未割り当て)
マイルストーン:
優先度:
5 - 中
重要度:
5 - 中
解決法:
受領
ファイル:
なし
投票
点数: 0
No votes
0.0% (0/0)
0.0% (0/0)

詳細

PuTTY 0.77

PuTTY 0.77 がリリースされていました。

https://www.chiark.greenend.org.uk/~sgtatham/putty/releases/0.77.html

PuTTY 0.78 Pre-release も出ています。

PuTTY 0.78

PuTTY 0.78 がリリースされていました。

https://www.chiark.greenend.org.uk/~sgtatham/putty/releases/0.78.html

対応状況

  • trunk
    • PuTTY 0.78 と RLogin をもとにした独自実装に切り替え
  • 4-stable
    • 対応しない

チケットの履歴 (26 件中 3 件表示)

2022-09-16 17:40 更新者: nmaya
  • 新しいチケット "FYI: PuTTY 0.77" が作成されました
2022-12-21 01:47 更新者: nmaya
  • 担当者(未割り当て) から nmaya に更新されました
  • 解決法なし から 受領 に更新されました
  • 詳細が更新されました
  • 概要が更新されました
2022-12-23 23:01 更新者: nmaya
  • 概要が更新されました
コメント

PuTTY のソース構成が変更されているので、必要な関数を追いかけて putty プロジェクトへの追加を変更してみましたが、解決できないものが3つあります。

ここまでの作業を r10433 でコミットしました。解決の糸口はあるでしょうか。

  • plug_closing_system_error()
    • windows\network.c をプロジェクトに追加すると、リンク時に in6addr_any(ws2_32.lib), in6addr_loopback(ws2_32.lib), sk_new(crypto-47.lib) が重複になる(error LNK2005)
    • windows\network.c を追加せずになんとかならないか?
  • sk_addr_free()
    • 同上
  • ssh_sha256_sw
    • ssh.h にあるはずだが、なぜ見つけられない?
2023-01-10 19:40 更新者: nmaya
  • マイルストーン(未割り当て) から Tera Term 5.0 に更新されました
2023-03-27 08:01 更新者: nmaya
コメント

いまの Pageant は WM_COPYDATA(pageant_shm) だけでなく named-pipe での通信もするようになっています。

cf. https://git.tartarus.org/?p=simon/putty.git;a=blob;f=windows/agent-client.c;h=168465e54d74bcecc2ddcf45e2b16fc94cb035bc;hb=HEAD#l282

「WM_COPYDATA での通信を TTSSH 側で独自実装し、PuTTY へのリンクをやめる」と、「TTSSH からは WM_COPYDATA でのみアクセスする」となります。また、named-pipe のことだけでなく、今後の PuTTY の進展に追いついていくのも難しくなっていくように思います。

(編集済, 2023-03-29 07:51 更新者: nmaya)
2023-04-07 23:33 更新者: zmatsuo
コメント

puttyのソースを持ってくるのはなかなか骨が折れそうです。 悩ましいです。

PuTTYはagentとの通信部を 別プロジェクト(Tera Termにも)提供している、 という感じではないと思うので 今後も簡単に持ってこれないということがおきそうです。

でも、なるべくそのまま利用できるなら進展に追いつけてよさそうです。

pageantとの通信はcygtermにすでに動作するコードが入ってますし、 自分たちのコードに置き換えてしまうのもよさそうです。

rloginのコード

https://github.com/kmiya-culti/RLogin/blob/master/RLogin/MainFrm.cpp#L1356

通信部分よりもバッファ管理部分がネックでしょうか。 std::vector<uint8_t> を使って書けば良いかも。

どうしたものかもう少し考えます。

2023-04-08 00:47 更新者: nmaya
コメント

PuTTY の Agent 対応部分は 2008年6月に書かれたもので、この時点での PuTTY のバージョンは 0.60 です。WM_COPYDATA のみが実装されています。

PuTTY の agent_query() が named-pipe を見に行くようになったのは 0.75 からで、Tera Term は 0.76 を使用するようになっています。実装を「WM_COPYDATA のみ」にしてしまうと、いったん対応した機能を削除することになります。

2023-04-13 00:44 更新者: zmatsuo
コメント

どうしたものかもう少し考えます。

試しに新しい ssh agent 通信部を作成しました。

sshagentブランチを作って入れました。ttssh2/libsshagent/ フォルダです。

まだ完成ではないですが普段使いできます。 意見を聞いてからもっと進めるか破棄か保留か考えればと思っています。

次のことができます

  • pageant と従来の通信(共有メモリ)
  • pageant NamedPipe と通信
  • Microsoft SSH Agent (NamedPipe) と通信

今のところ次の点がTODOです

  • ssh1系が未実装(手もとでは使っていないので後回しに…)
  • pageant の共有メモリのセキュリティ設定が未実装(調べていない)

sshagent通信部は次の3つのうち1つを選べます

  • 従来と同じ putty
  • 何もしない skelton
  • 今回作った sshagent

ttssh2/ttssh.*.slnからだと、puttyが選択されています。

cmakeビルドのとき、ttssh2/libsshagent/CMakeLists.txt のオプションで どれを使うか選べます。

そこそこコンパクトで保守しやすそう、これに入れ替えてもよさそうだと思い ますがどうでしょうか? ご意見いただければ。

2023-04-26 21:55 更新者: nmaya
コメント

ありがとうございます。今のところまでで、ざっと見て気になる点を。

TTSSH 側で全部実装してしまう

後述のように追従していくならいいと思います。

模倣元にするソースコード

RLogin のソースを深く見たことがないので、新しいコードの関数名や変数名やコードの流れが PuTTY と RLogin にそれぞれどのくらい寄っているのか、ぱっと見わかりませんでしたが、「PuTTY は Camel Case はあまり使わなそう」ということから、RLogin のほうに寄っているような印象を受けました。

「(今後の PuTTY の)進展に追いつ(く)」つまり、「いま TTSSH が元にしているバージョンの PuTTY のソースと、新しい PuTTY のソースを比較して、その差分を適用する」を続けるつもりであれば、PuTTY に寄せておいたほうが比較しやすいです。

sha256

pipe の名前生成に sha256 が必要で独自実装していますが(PuTTYもRLoginも)、せっかくリンクしているので LibreSSL/OepnSSL の関数を呼んだらスリムになると思いました。

OpenSSH のパイプ

これは PuTTY にはありませんが、RLogin からものですか?

  • named-pipe を使う仕組みは一緒
  • named-pipe 名が違う
  • 通信相手は C:\Windows\System32\OpenSSH\ssh-agent.exe

という理解でいいですか?

ライセンス

どこまでが「参考にした」で、どこからが「利用している」になるかわかりませんが、流用した量によっては RLogin のクレジットが必要になるかと思います。

2023-04-29 00:58 更新者: zmatsuo
コメント

ありがとうございます。

模倣元にするソースコード

libputty.h はスネークケースですね。

見返すといろいろ混ざっていますね。PuTTY(スネークケース)に寄せようと思います。

sha256

sshagent/ (sshagentc/ のほうが妥当そう・・) は、 Tera Term以外でも使えるように このソースツリーだけでビルドできるようにしました。

sha256.c,h は bcrypt.dll(たしかVista以降です)があれば使えるようにしました。

LibreSSL/OepnSSL を使うようにすればXPなどでもokですね。調べます。

OpenSSH のパイプ

  • named-pipe を使う仕組みは一緒
  • named-pipe 名が違う
  • 通信相手は C:\Windows\System32\OpenSSH\ssh-agent.exe

の通りです。

ssh.exeは環境変数 SSH_AUTH_SOCK を見るので、Tera Term (sshagent)もそのようにしたほうがよさそうですね。

通信のテストはssh-agent.exeではなく、互換性のある pageant+ を使っていました(ちょっと詳しいです:-)。

RLoginのソースもチェックしました。

ライセンス

流用した量によっては RLogin のクレジットが必要になるかと思います。

参考にしたので入れようと思います。

今後

puttyや他のクライアントの動作/エージェント/通信内容に追従していきます。

通信先エージェントは今実装してある3つでまずはokかなと思います。 通信内容は SSH Agent Protocol から外れた拡張が必要そうならそのとき検討しましょう。

RLoginのクレジットをいれて、スネークケースに変更できたぐらいでtrunkに入れようと思います。 デフォルトは従来通りのputtyで、ブランチと同様にビルド時に選べば切り替えられるようにしておきます。 そのあとにセキュリティAPIを使う、ssh1系を実装という感じで進めようと思います。

実装が進んできたらデフォルトをsshagent に切り替えて、 様子を見て問題なさそうだたったらputtyを削除という流れですね。

ssh1は手もとにテスト環境がないので作らないといけません。 簡単に準備できるテスト環境があれば教えてください。 よろしくお願いします。

2023-05-02 23:38 更新者: zmatsuo
コメント

修正しました。r10692-r10695です。

snapshotにバイナリを置きました。

https://osdn.net/projects/ttssh2/storage/snapshot/teraterm-5.0-dev-r10696-20230502-appveyor.zip

2023-05-07 23:59 更新者: nmaya
コメント

ありがとうございます。

模倣元にするソースコード

r10697 で出典の追加や関数名の修正などを行いました。

sha256

このソースツリーだけでビルドできるようにしました。

意図がわかりました。

ライセンス

ttssh2\libsshagentc\sshagentc.cpp
// PuTTY is copyright 1997-2023 Simon Tatham.
// RLogin is copyright 1998-2023 Culti

それぞれの LICENSE ファイルの表記と異なります。ライセンス表記を改竄しないようにしてください。

RLogin のクレジットが必要になるかと思います。

「ソースコードにライセンス表記を追加する」ことだけではなく、https://ttssh2.osdn.jp/manual/4/ja/about/copyright.html#copyright_ttssh へ追加すること(MITライセンスであることの表示・libsへソースを展開するわけではないのでライセンスファイルへのリンクまでは考えていない)を意図して書きました。切り替えたらここまでする必要があると感じます。

SSH1

ttssh2-dev 178 で書きましたが、https://github.com/nmaya/docker-ttssh-sshd が使えます。

shell に入って /home/ttssh2/.ssh/authorized_keys に RSA1 の公開鍵を登録すれば、SSH1 の公開鍵認証の確認ができます。

(編集済, 2023-05-08 12:18 更新者: nmaya)
2023-05-09 23:38 更新者: zmatsuo
コメント

修正&チェック、ありがとうございます。

それぞれの LICENSE ファイルの表記と異なります。ライセンス表記を改竄しないようにしてください。

「PuTTYはSimon Tatham氏の著作物です」をどう書いたものかなと悩んで、 PuTTYのライセンスファイルの先頭から持ってきました。 RLogin も同じ感じで書いたものです。 どんなふうに書くのがよさそうでしょう?

https://ttssh2.osdn.jp/manual/4/ja/about/copyright.html#copyright_ttssh へ追加する

PuTTY はすでに copyright.html に入っているので、RLogin を同様に追加すればokそうですね。

(MITライセンスであることの表示・libsへソースを展開するわけではないのでライセンスファイルへのリンクまでは考えていない)

将来PuTTYのソースツリーがlib/からなくなると参照するライセンスファイルがなくなってしまいます。 OpenSSH-LICENSE.txt みたいにソースツリーに入れておくか、 次のライセンスファイルへのリンクにするのはどうでしょうか

ライセンスファイルURL

SSH1

ttssh2-dev 178 で書きましたが、https://github.com/nmaya/docker-ttssh-sshd が使えます。

shell に入って /home/ttssh2/.ssh/authorized_keys に RSA1 の公開鍵を登録すれば、SSH1 の公開鍵認証の確認ができます。

ありがとうございます。チャレンジしてみます。

2023-05-10 00:20 更新者: nmaya
コメント

どんなふうに書くのがよさそうでしょう?

PuTTY 0.78 の LICENSE

PuTTY is copyright 1997-2022 Simon Tatham.
RLogin の LICENSE
Copyright (c) 2017 Culti
ライセンスは法的な文面だと理解しています。同じ感じで書くのではなく、厳密にコピーしてください。

OpenSSH-LICENSE.txt みたいにソースツリーに入れておくか

OpenSSH のライセンスファイルはリポジトリで管理しておらず、libs 内に展開されたソースツリーからコピーしています。cf. doc/convtext.bat

次のライセンスファイルへのリンクにするのはどうでしょうか

オフラインの chm で見られないように作るのはよくありません。lib/putty がなくなったら、元にしたバージョンのライセンスファイルをリポジトリで管理するのがよいと思います。

2023-05-10 00:59 更新者: zmatsuo
コメント

https://github.com/nmaya/docker-ttssh-sshd/tree/main/openssh これを使ってみました。

Docker Desktop (Windows)では

docker.exe build -t ssh1 .
  :
> [ 2/10] RUN yum install -y rpm-build &&     useradd -s /sbin/nologin mockbuild &&     yum install -y gcc &&     yum install -y wget:
------
executor failed running [/bin/sh -c yum install -y rpm-build &&     useradd -s /sbin/nologin mockbuild &&     yum install -y gcc &&     yum install -y wget]: exit code: 139

Linux実機(Debian GNU/Linux 12 (bookworm)) 上では

docker build -t ssh1 .
  :
Status: Downloaded newer image for ghcr.io/nmaya/centos6-vault:latest
 ---> f2b6e63d5e83
Step 2/11 : RUN yum install -y rpm-build &&     useradd -s /sbin/nologin mockbuild &&     yum install -y gcc &&     yum install -y wget
 ---> Running in 8333ff15323b
The command '/bin/sh -c yum install -y rpm-build &&     useradd -s /sbin/nologin mockbuild &&     yum install -y gcc &&     yum install -y wget' returned a non-zero code: 139

うまく環境が作れませんでした。

2023-05-10 01:09 更新者: zmatsuo
コメント

nmaya への返信

ライセンスは法的な文面だと理解しています。同じ感じで書くのではなく、厳密にコピーしてください。

了解しました。

2023-05-10 22:30 更新者: nmaya
コメント

うまく環境が作れませんでした。

手元の CentOS 8, Ubuntu 20.04 では問題ありませんでした。

エラーコードでぐぐってみましたが、これとかですか?https://qiita.com/nakat-t/items/271071eeb0c0c9143396

2023-05-10 23:57 更新者: zmatsuo
コメント

nmaya への返信

エラーコードでぐぐってみましたが、これとかですか?https://qiita.com/nakat-t/items/271071eeb0c0c9143396

これでした。ありがとうございます。

環境を準備できそうです。

2023-05-13 22:36 更新者: zmatsuo
  • 状況オープン から 完了 に更新されました
コメント

Reply To zmatsuo

nmaya への返信

ライセンスは法的な文面だと理解しています。同じ感じで書くのではなく、厳密にコピーしてください。

了解しました。

r10698 で修正しました。

2023-05-13 22:37 更新者: zmatsuo
  • 状況完了 から オープン に更新されました
2023-05-13 22:47 更新者: zmatsuo
コメント

nmaya への返信

エラーコードでぐぐってみましたが、これとかですか?https://qiita.com/nakat-t/items/271071eeb0c0c9143396

これでした。ありがとうございます。 環境を準備できそうです。

ssh1がテストできる環境を手元で準備できました。ありがとうございます。

ssh1関連を実装してコミットしました。 r10699 です。

2023-05-14 00:08 更新者: zmatsuo
コメント

r10701 で RLogin のライセンスを追加しました。

2023-06-08 23:19 更新者: zmatsuo
コメント

手もとでは、新しいssh agent通信に切り替えて使用していますが特に問題なさそうです。

デフォルトを新しいssh agent通信に切り替えて様子を見てみてはと思います。 いかがでしょうか?

2023-06-10 09:45 更新者: nmaya
コメント

大丈夫そうですね。

2023-06-11 23:49 更新者: zmatsuo
コメント

nmaya への返信

大丈夫そうですね。

😄

trunk の sshagent clientの切り替えました。r10750です。

スナップショットを作りました。

https://osdn.net/projects/ttssh2/storage/snapshot/teraterm-5.0-dev-r10750-20230611-appveyor.zip

2023-07-02 21:54 更新者: nmaya
  • 状況オープン から 完了 に更新されました
  • 詳細が更新されました

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする