Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Not support ECDSA key files to login a Ubuntu Server

オープン
#321 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
rust, ubuntu

調査の方向性

Ubuntu 24.04 上で ECDSA キーを使用し、ssh2 0.9.4 の userauth_pubkey_file エントリーポイントを通じて失敗を再現し、動作する RSA のケースと比較します。src/sshdirsyncer.rs:93 の呼び出しから報告された失敗を追跡し、ECDSA 認証を正常に完了できるかどうかを判断します。issue ではリポジトリのテストについて言及されていません。

索引モデルが issue の本文から書いたものです。

説明

System:

Windows 11 -> Ubuntu 24.04 LTS
ii openssh-server 1:9.6p1-3ubuntu13.4 amd64 secure shell (SSH) server, for secure access from remote machines

version:

ssh2 = "0.9.4"

code

    pub fn login(&mut self) {
        /* 登录 */
        let tcp = TcpStream::connect(format!("{}:{}", self.host, self.port)).expect(format!("TCP创建失败: {}:{}", self.host, self.port).as_str());
        self.session.set_tcp_stream(tcp);
        self.session.handshake().expect(format!("TCP握手失败: {}:{}", self.host, self.port).as_str());

        if self.prikey.chars().count() > 0 {
            // 使用证书认证
            let prikeyf = Path::new(self.prikey.as_str());
            self.session.userauth_pubkey_file(&self.username, None, prikeyf, Some(&self.password)).expect("证书认证失败");
        } else {
            // 使用密码认证
            self.session.userauth_password(&self.username, &self.password).expect("密码认证失败");
        }
        assert!(self.session.authenticated());
    }

If I use an RSA key file, it works well, but when I use an ECDSA key file, it runs into an error like this:

证书认证失败: Error { code: Session(-1), msg: "unknown error" }
stack backtrace:
   0: std::panicking::begin_panic_handler
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\panicking.rs:645
   1: core::panicking::panic_fmt
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\core\src\panicking.rs:72
   2: core::result::unwrap_failed
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\core\src\result.rs:1654
   3: enum2$<core::result::Result<tuple$<>,ssh2::error::Error> >::expect<tuple$<>,ssh2::error::Error>
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\core\src\result.rs:1034
   4: sync_ssh_dir::sshdirsyncer::SshdirSyncer::login
             at .\src\sshdirsyncer.rs:93
   5: sync_ssh_dir::sshdirsyncer::SshdirSyncer::run_sync
             at .\src\sshdirsyncer.rs:260
   6: sync_ssh_dir::main
             at .\src\main.rs:14
   7: core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\core\src\ops\function.rs:250
   8: core::hint::black_box
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\core\src\hint.rs:337
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
error: process didn't exit successfully: `target\debug\sync_ssh_dir.exe` (exit code: 101)
主要言語
Rust
スター
571
フォーク
166
平均マージ
1日 18時間
マージ済み PR(30日)
5

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

rust-lang/ssh2-rs のほかの issue

rust-lang/ssh2-rs の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。