我正在使用带有SFTP插件的Sublime Text。在我的项目中,我设置了一个sftp-config.json文件,指定了FTP连接所需的细节。只要我使用普通的用户密码登录,一切都很好,我可以建立一个连接。
然而,我尝试使用ssh密钥来代替。我的ssh密钥文件是 C:/Users/<username>/.ssh/id_rsa
. 当我在power shell上手动运行sftp时,连接成功建立。
PS C:\> sftp -i C:/Users/<username>/.ssh/id_rsa <username>@<host>
Connected to <username>@<host>.
当然了 username
和 host
被替换为我的实际凭证。
现在,当我试图使用SFTP插件的Sublime Text做同样的事情时,它不能工作。相反,当连接时,我被提示输入我的密码,就像当 不 使用ssh密钥。我也确定它问的不是密钥的密码(密钥目前没有密码),只按回车键而不输入密码也不会成功。在我看来,这个插件似乎忽略了我已经提供了一个SSH密钥的事实:如果我输入我的 FTP服务器的密码,它 是否 连接成功,但这当然不是我想要的。
我在想一定是我在配置文件中犯了一个错误,但我想不出应该是什么。我也阅读了网上的文档,它没有提到任何额外的步骤,应该是必要的。这是我的配置文件(当然有某些替换)。
{
"type": "sftp",
"save_before_upload": true,
"upload_on_save": false,
"sync_down_on_open": false,
"sync_skip_deletes": false,
"sync_same_age": true,
"confirm_downloads": false,
"confirm_sync": true,
"confirm_overwrite_newer": false,
"host": "<host>",
"user": "<username>",
"remote_path": "<remotepath>",
"ignore_regexes": [
"\\.sublime-(project|workspace)", "sftp-config(-alt\\d?)?\\.json",
"sftp-settings\\.json", "/venv/", "\\.svn/", "\\.hg/", "\\.git/",
"\\.bzr", "_darcs", "CVS", "\\.DS_Store", "Thumbs\\.db", "desktop\\.ini"
],
"connect_timeout": 30,
"ssh_key_file": "C:/Users/<username>/.ssh/id_rsa"
}
作为一种替代方法,我还尝试了指定 "sftp_flags": ["-i", "C:/Users/<username>/.ssh/id_rsa"]
而不是使用 ssh_key_file
设置,但无济于事。
有谁能让这个功能发挥作用,并给我一个提示,我做错了什么?
我能够确定问题所在:Sublime Text的SFTP插件在Windows上使用psftp(Putty sftp客户端)。Psftp不能和OpenSSH密钥一起使用,因为它使用不同的密钥文件格式。因此,我不得不使用Puttygen(Putty密钥生成器)将我的OpenSSH密钥转换为PPK密钥。使用这个工具,我能够加载我的密钥,并将其转换为PPK文件(选择 Conversions > Import key
然后从菜单中选择 Save private key
). 这个键就可以和Sublime Text插件一起使用。