C #에서 SSH.NET이있는 문자열의 "OPENSSH"개인 키 파일을 사용하면 "잘못된 개인 키 파일"과 함께 실패합니다.

앤드류 브

SFTP 또는 OpenSSH에 대한 경험이 없습니다. 클라이언트의 SFTP에 연결하여 파일을 업로드하려고합니다.

SSH.NET 라이브러리를 사용하고 있습니다 – https://github.com/sshnet/SSH.NET

내 C # 코드 내에서 문자열 변수에 개인 키가 있습니다.

var key = @"-----BEGIN OPENSSH PRIVATE KEY-----
// snipped
-----END OPENSSH PRIVATE KEY-----
";

MemoryStream keyStream = new MemoryStream(Encoding.UTF32.GetBytes(key));

Renci.SshNet.ConnectionInfo conn = new Renci.SshNet.ConnectionInfo(
    host, 
    port,
    username, 
    new AuthenticationMethod[]
    {
         new PrivateKeyAuthenticationMethod(username, new PrivateKeyFile[]
         {
            new PrivateKeyFile(keyStream, ""), 
         }), 
    });

하지만 오류가 발생합니다.

잘못된 개인 키 파일입니다.

내 질문은 시작 BEGIN RSA되지만 내 키가 시작 되는 다른 키를 본 적이 있다는 것 BEGIN OPENSSH입니다. 이것이 문제입니까?

마틴 프리 크릴

코드에 두 가지 문제가 있습니다.

  • PrivateKeyFile클래스를 사용하여 키를 읽고 StreamReader있는 기본값 UTF8. 아닙니다 UTF16. 그래서 애매하게 읽기가 실패합니다

    잘못된 개인 키 파일입니다.

  • 당신이를 수정하는 경우 Encoding.UTF32Encoding.UTF8, 아직도하지만 실패합니다. SSH.NET이 OPENSSH형식을 지원하지 않는다는 것을 올바르게 추측했습니다 .

    최신 SSH.NET 2020.0.0은 OPENSSH형식 ssh-ed25519지원합니다 . 다음과 같이 표시됩니다.

    openssh 키 유형 : ssh-rsa는 지원되지 않습니다.

    이전 버전은이 형식을 전혀 지원하지 않았으며 다음과 같이 말합니다.

    'OPENSSH'키는 지원되지 않습니다.

    이러한 OPENSSH키는 최신 버전의 OpenSSH (7.8 이상)에서 생성됩니다.

    ssh-keygen키를 클래식 OpenSSH 형식 으로 변환하는 데 사용할 수 있습니다 .

    ssh-keygen -p -f file -m pem -P passphrase -N passphrase
    

    (키가 암호로 암호화되지 않은 경우 ""대신 사용 passphrase)

    Windows 사용자의 경우 : ssh-keygen.exe이제 Windows 10에 기본 제공됩니다 . 이전 버전의 Windows 용 Microsoft Win32-OpenSSH 프로젝트에서 다운로드 할 수 있습니다 .


    Windows에서는 PuTTYgen ( PuTTY 패키지 )을 사용할 수도 있습니다 .

    • PuTTYgen 시작
    • 키로드
    • 전환> OpenSSH 키 내보내기로 이동합니다 .
      RSA 키의 경우 클래식 형식 을 사용 합니다.

    당신이 새 키를 생성하는 경우 ssh-keygen, 단지 추가 -m PEM에서 새 키 생성 고전적인 형식을 :

    ssh-keygen -m PEM
    

이것은 작동합니다 :

var key = @"-----BEGIN RSA PRIVATE KEY-----
MIIEoQIBAAKCAQEAjQtUVe5ewYro8utRXqftODAg9zpqkP3+kmpVoIIXe27ga3jy
rUzJtCItx1jqjdZypcPrxB+8j2nUJj108Bw5y088OquGz/GhBk0uTN+/kQ7K4vnE
y7X4VuKDOloAAXRcyUZ621RWzM/Xp5M/lU6kuR+TtlMd1lpWmeKSNXhfP4gYaPMT
p/4+u247ng+HIwW9CLl5PGIO/AXImt/XyVMKMqw8IgGRKaYBBL2R9wLPBAYVzgHe
svfSDYdeNyh3XG+gbLgq2lmCYcq3wF//Ms3G/cTIm1ipeaeL89bTR9fYhLwQFdlp
UPy8wii/7jlfY/V+8EHQENNGZc3w0wPzP7EdkwIBJQKCAQBIbZoCnQA534xhEQ4b
2bEqsO5VcQZKdJd7nmNSbFE/YnM+G4OJbJ7tzFyyecSOBlaMeV1ktlnox6RK/Pbc
KiuEE+5+/iKiIiJBgZRQ/UayRd3OgEJ2cjNq4wUd9t1oh9yetX1b3zN97jB4pY9a
glSWailB81SC1HGo986KKQ5RDcA9cNa19uBEkUcTdcaph8wLcUDkT2PsavJt1wUF
0d8E3mKejDFMJJBt+642PdnrSK2N+3TtkEx2DxMAoQ5gPfaDWeN4QwbxDeNllfFM
BHj7ezL2N+U037fp/jAMyWVDaqN2leAakXkqQ73pdnvIsYHlxIvNTq0rFD64ELkT
ABq9AoGBAPG63tfV7Bzkd/iX5uIrjJY1UtbxhWMaoaF6tEJ+wZyEpcVEYWcFu0v2
20aFsdFWYFTe2vqkVcJpm3QjUJqBg6D7LWUBmy46VFlXhpvkp9g7I4xeRLT9xWVY
iwCgofyKw3Wa+aZWyBxt3DR2e+WKU5y4/dqAoprgGy3ChgSjM4DLAoGBAJVe2i3o
+3qUzeEIrxSf3H6HOT7fGaXsk+M8zDqrBjSki0sHMNedHMQ3tM/EUc6SnvWyPTZA
AlJSOllIg0eYxCzdiuJ1SUai4g9fp+u6HTkOzETJY7zfBhFM45AHkrh2r6z/u+Yk
yH57QeO+k2BgSDYZgdfX9cYW3C365BpqBCVZAoGBAOSp2bdpfnwyEJ8MO0SlvFa8
0dI+aWuVu30TNOT0cfTsLht4CRxDsSwus79AMpWW5YC3IitdLod4p865n0YLz4px
D0Pe7L0Gvn4Gr8PmIjs+3HAGJVFDFKv5z5jPTR9S1JHXyY+ChfFhALwBYHFZVgL0
LmboYnbT/gixFv13yO9zAoGAcQmCg5uN4DlB2rp2p9LsDLlbwOAvFcfJ3GVcSBK4
lopbkrlVZOWZOosFXvVuVyLZKKKPL/kWg3x/Ls8XPRmpNrV9285g9y8nnO5xPMQx
ylBjOvlEju32wPvqetVMb+sdKPjhOIqJ4yzX6p4OqcxSUnQq6IfA6O60ddKex+GG
mM0CgYAqm3oISjWhyq+4iN4C2eQXtAdAjkA7c0ZaHRFFapOI+ZqPXEi+oyhuPj4Z
ZeUcZkS9cYKkgRGDG33p1ZiR+iY7I6Qv8Seyu/oh75/lL0imiq7yKTmizL2WIow7
lT1yYNZJI/YNEdWPKOZl6kYsHliW8TaUk0yvDC/LPADabjvjzg==
-----END RSA PRIVATE KEY-----
";

MemoryStream keyStream = new MemoryStream(Encoding.UTF8.GetBytes(key));
new PrivateKeyFile(keyStream);

SSH.NET을 사용하여 구성 문자열에서 SSH 개인 키를로드 할 때 "Renci.SshNet.Common.SshException : 유효하지 않은 개인 키 파일" 관련 질문이 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관