PuTTY 0.78
PuTTY のソース構成が変更されているので、必要な関数を追いかけて putty プロジェクトへの追加を変更してみましたが、解決できないものが3つあります。
ここまでの作業を r10433 でコミットしました。解決の糸口はあるでしょうか。
いまの Pageant は WM_COPYDATA(pageant_shm) だけでなく named-pipe での通信もするようになっています。
「WM_COPYDATA での通信を TTSSH 側で独自実装し、PuTTY へのリンクをやめる」と、「TTSSH からは WM_COPYDATA でのみアクセスする」となります。また、named-pipe のことだけでなく、今後の PuTTY の進展に追いついていくのも難しくなっていくように思います。
puttyのソースを持ってくるのはなかなか骨が折れそうです。 悩ましいです。
PuTTYはagentとの通信部を 別プロジェクト(Tera Termにも)提供している、 という感じではないと思うので 今後も簡単に持ってこれないということがおきそうです。
でも、なるべくそのまま利用できるなら進展に追いつけてよさそうです。
pageantとの通信はcygtermにすでに動作するコードが入ってますし、 自分たちのコードに置き換えてしまうのもよさそうです。
rloginのコード
https://github.com/kmiya-culti/RLogin/blob/master/RLogin/MainFrm.cpp#L1356
通信部分よりもバッファ管理部分がネックでしょうか。 std::vector<uint8_t> を使って書けば良いかも。
どうしたものかもう少し考えます。
PuTTY の Agent 対応部分は 2008年6月に書かれたもので、この時点での PuTTY のバージョンは 0.60 です。WM_COPYDATA のみが実装されています。
PuTTY の agent_query() が named-pipe を見に行くようになったのは 0.75 からで、Tera Term は 0.76 を使用するようになっています。実装を「WM_COPYDATA のみ」にしてしまうと、いったん対応した機能を削除することになります。
どうしたものかもう少し考えます。
試しに新しい ssh agent 通信部を作成しました。
sshagentブランチを作って入れました。ttssh2/libsshagent/ フォルダです。
まだ完成ではないですが普段使いできます。 意見を聞いてからもっと進めるか破棄か保留か考えればと思っています。
次のことができます
今のところ次の点がTODOです
sshagent通信部は次の3つのうち1つを選べます
ttssh2/ttssh.*.slnからだと、puttyが選択されています。
cmakeビルドのとき、ttssh2/libsshagent/CMakeLists.txt のオプションで どれを使うか選べます。
そこそこコンパクトで保守しやすそう、これに入れ替えてもよさそうだと思い ますがどうでしょうか? ご意見いただければ。
ありがとうございます。今のところまでで、ざっと見て気になる点を。
後述のように追従していくならいいと思います。
RLogin のソースを深く見たことがないので、新しいコードの関数名や変数名やコードの流れが PuTTY と RLogin にそれぞれどのくらい寄っているのか、ぱっと見わかりませんでしたが、「PuTTY は Camel Case はあまり使わなそう」ということから、RLogin のほうに寄っているような印象を受けました。
「(今後の PuTTY の)進展に追いつ(く)」つまり、「いま TTSSH が元にしているバージョンの PuTTY のソースと、新しい PuTTY のソースを比較して、その差分を適用する」を続けるつもりであれば、PuTTY に寄せておいたほうが比較しやすいです。
pipe の名前生成に sha256 が必要で独自実装していますが(PuTTYもRLoginも)、せっかくリンクしているので LibreSSL/OepnSSL の関数を呼んだらスリムになると思いました。
これは PuTTY にはありませんが、RLogin からものですか?
という理解でいいですか?
どこまでが「参考にした」で、どこからが「利用している」になるかわかりませんが、流用した量によっては RLogin のクレジットが必要になるかと思います。
ありがとうございます。
libputty.h はスネークケースですね。
見返すといろいろ混ざっていますね。PuTTY(スネークケース)に寄せようと思います。
sshagent/ (sshagentc/ のほうが妥当そう・・) は、 Tera Term以外でも使えるように このソースツリーだけでビルドできるようにしました。
sha256.c,h は bcrypt.dll(たしかVista以降です)があれば使えるようにしました。
LibreSSL/OepnSSL を使うようにすればXPなどでもokですね。調べます。
の通りです。
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は手もとにテスト環境がないので作らないといけません。 簡単に準備できるテスト環境があれば教えてください。 よろしくお願いします。
修正しました。r10692-r10695です。
snapshotにバイナリを置きました。
https://osdn.net/projects/ttssh2/storage/snapshot/teraterm-5.0-dev-r10696-20230502-appveyor.zip
ありがとうございます。
r10697 で出典の追加や関数名の修正などを行いました。
このソースツリーだけでビルドできるようにしました。
意図がわかりました。
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へソースを展開するわけではないのでライセンスファイルへのリンクまでは考えていない)を意図して書きました。切り替えたらここまでする必要があると感じます。
ttssh2-dev 178 で書きましたが、https://github.com/nmaya/docker-ttssh-sshd が使えます。
shell に入って /home/ttssh2/.ssh/authorized_keys に RSA1 の公開鍵を登録すれば、SSH1 の公開鍵認証の確認ができます。
修正&チェック、ありがとうございます。
それぞれの 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
ttssh2-dev 178 で書きましたが、https://github.com/nmaya/docker-ttssh-sshd が使えます。
shell に入って /home/ttssh2/.ssh/authorized_keys に RSA1 の公開鍵を登録すれば、SSH1 の公開鍵認証の確認ができます。
ありがとうございます。チャレンジしてみます。
どんなふうに書くのがよさそうでしょう?
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 がなくなったら、元にしたバージョンのライセンスファイルをリポジトリで管理するのがよいと思います。
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
うまく環境が作れませんでした。
うまく環境が作れませんでした。
手元の CentOS 8, Ubuntu 20.04 では問題ありませんでした。
エラーコードでぐぐってみましたが、これとかですか?https://qiita.com/nakat-t/items/271071eeb0c0c9143396
nmaya への返信
エラーコードでぐぐってみましたが、これとかですか?https://qiita.com/nakat-t/items/271071eeb0c0c9143396
これでした。ありがとうございます。
環境を準備できそうです。
nmaya への返信
エラーコードでぐぐってみましたが、これとかですか?https://qiita.com/nakat-t/items/271071eeb0c0c9143396
これでした。ありがとうございます。 環境を準備できそうです。
ssh1がテストできる環境を手元で準備できました。ありがとうございます。
ssh1関連を実装してコミットしました。 r10699 です。
r10701 で RLogin のライセンスを追加しました。
手もとでは、新しいssh agent通信に切り替えて使用していますが特に問題なさそうです。
デフォルトを新しいssh agent通信に切り替えて様子を見てみてはと思います。 いかがでしょうか?
大丈夫そうですね。
nmaya への返信
大丈夫そうですね。
😄
trunk の sshagent clientの切り替えました。r10750です。
スナップショットを作りました。
https://osdn.net/projects/ttssh2/storage/snapshot/teraterm-5.0-dev-r10750-20230611-appveyor.zip
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
対応状況