SFTP 要求输入未加密私钥的密码,但 WinSCP 工作正常吗?

Pau*_*aul 3 linux redhat sftp private-key

概括:

我想将文件从一台服务器 SFTP 到另一台服务器,并使用私钥进行授权。

我相信公钥安装正确(WinSCP 允许我使用私钥登录),并且我在生成密钥对时故意没有创建密码....但是当我尝试在命令行上 SFTP 时,我m 提示输入不存在的密码和用户密码。

如何仅使用解包的私钥进行 SFTP?

细节:

我有两台服务器:

  • 到服务器123

  • 来自Server123

我想使用私钥登录将文件从一台服务器 SFTP 到另一台服务器。

  1. 我使用 puttyGen 生成一个公私钥对:

    • 提供提示的随机运动后,我保存了公钥和私钥
    • 当提示未加密的私钥时,我将密码字段留空并选择“是”
  2. 我在 toServer123 上安装了公钥:

    • 我创建了一个密码为“password123”的用户 paultest
    • 我测试我可以作为用户 paultest ssh 进入 toServer123
    • 我创建 /home/paultest/.ssh/authorized_keys 并添加公钥
    • 公钥看起来像:

      cat /home/paultest/.ssh/authorized_keys #=>

      ssh-rsa verylongstringoflettersandnumbersNoNewlines paultest@toServer123

    • 我 chmod 权限:authorized_keys (644), .ssh (700)

  3. 我在 fromServer123 上安装私钥:

    • 我创建目录:/home/support_user/sftp_proc (chmod 700)

    • 我将 my_private_key.ppk (chmod 600) 上传到 /sftp_proc

    • 我在 /sftp_proc 中创建文件 text.txt ,其中只包含“这是一个测试”

  4. 作为 support_user,我尝试从 fromServer123 SFTP 到 toServer123:

    sftp -oIdentityFile=./my_private_key.ppk paultest@toServer123
    
    Run Code Online (Sandbox Code Playgroud)

我的期望:

我在没有进一步提示的情况下登录到服务器,因为我使用未包装的密钥文件登录。

我得到了什么:

Connecting to toServer123...

Unauthorized access to or use of this system is prohibited.
All access and use may be monitored and recorded.

Enter passphrase for key './my_private_key.ppk':
Run Code Online (Sandbox Code Playgroud)

我只是按回车键,然后得到:

paultest@toServer123's password:
Run Code Online (Sandbox Code Playgroud)

调试步骤:

  • 如果我提供 paultest 密码,则 SFTP 工作 - 但我不想使用密码,我想用私钥登录

  • 如果我尝试使用 winSCP 登录并提供私钥,我可以仅使用该密钥登录 - 我没有收到密码或密码提示。

问题:

如果我的目标是在不提供密码的情况下登录,并且不提示输入不存在的密码,我做错了什么?

编辑

my_private_key.ppk 看起来像:

PuTTY-User-Key-File-2: ssh-rsa
Encryption: none
Comment: rsa-key-20190528
Public-Lines: 6
LOTSOFLETTERSabcSYMBOLS//++ANDNUMBERS123==
Private-Lines: 14
EVENEVENMORELOTSOFLETTERSabcSYMBOLS//++ANDNUMBERS123==
Private-MAC: cf6c5c786f51a623b28eabe226c98dd6faa09787
Run Code Online (Sandbox Code Playgroud)

Rom*_*nov 7

AFAIKsftp期望不同格式的密钥。OpenSSH 的密钥应如下所示:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAyGhJBM7lcIZgvTbLG4S2N1oHAIszqAKKysCQY17Fp0dHvL+A
8mVCYwKL0otQfS2FHmmeRfrpLQtaK7R/DFnxfXn8xczpY8Cn6sv+GUjztN0gacOK
Yyiymnfr4mKgSaRIaJDmi3ua8mlddvwtUJFkAt7WrVAgx0z4MkW5jR+riKnT69D+
<snip> 
YFbX0QKBgFTXQ+h79DR4ZwW/f5pop9v8H7GD+g/xRKadgFp4GTKA7RJx64XN/ok+
12+u6pApA8w+ah2K2yoaBIV1d3MatYfUwSJ+0esXTYczBeSXOg6YqrMqjZ4KH2wO
kOyu2/4Dq7VcuK4PSnF1wbd+ZPHffh+YOJIII4iU7fYoRMDHa3tW
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

所以你应该将你的 ppk 密钥转换为 RSA 密钥。这里是如何使用腻子工具来做到这一点

  • 好的,我在 OpenSSH 7.7 中得到了 *"无效格式"*。但是如果我使用旧版本的 OpenSSH,比如 5.3,我确实会收到输入密码的提示。+1 (2认同)