Visual Studio Code - SFTP扩展使用SSH认证

23

我在我的Visual Studio Code工作流中使用vscode-sftp扩展将文件上传到远程服务器,每当我保存时。我正在尝试实现无密码身份验证,就像我以前使用Sublime Text的SFTP插件一样。但是,问题在于对于vscode-sftp,在sftp.json文件中,我必须以纯文本形式输入我的密码才能使其工作:

{
    "host": "mysamplehost.com",
    "port": 22,
    "username": "username",
    "password": "password",
    "protocol": "sftp",
    "agent": null,
    "privateKeyPath": null,
    "passphrase": null,
    "passive": false,
    "interactiveAuth": false,
    "remotePath": "/",
    "uploadOnSave": true,
    ...
}

然而,如果我通过SSH登录我的服务器,我不需要输入密码-因为我在MacBook中有SSH密钥。如何配置vscode-sftp以使用此身份验证方法?我在文档中看到以下评论,但我不知道如何设置:
  /**
   * string - Path to ssh-agent's UNIX socket for ssh-agent-based user authentication.
   * Windows users: set to 'pageant' for authenticating with Pageant or (actual) path to a cygwin "UNIX socket.
   */
  agent: null, 
  privateKeyPath: null, // absolute path to user private key
  passphrase: null,
  passive: false, // ftp passive mode

小提示:如果您使用的是AWS EC2,您必须使用公共IPv4 DNS地址,而非公共IPv4地址。 - hakkikonu
在 macOS 下,我所需要做的就是将 "agent": "$SSH_AUTH_SOCK" 添加到我的配置中。 - Martin CR
5个回答

29

我在偶然发现这个后解决了这个问题。下面是我的解决方法。首先,运行:

$ echo $SSH_AUTH_SOCK

sftp.json文件中输入agent的路径和您的私钥路径(id_rsa 文件)。以下配置对我有用:

"agent": "/private/tmp/com.apple.launchd.nPw17MhOqq/Listeners",
"privateKeyPath": "/Users/amitsn/.ssh/id_rsa",
"passphrase": null,
请注意,我没有设置密码短语,所以我将其留空。如果您有,则不要忘记填写此项。

1
那个代理路径在每次重启后都会改变,我找到的答案在这里https://apple.stackexchange.com/a/177419。 - Lance Perry
1
@Amit 这个扩展是由微软或VSCode官方支持的吗?VSCode是否有内置的sftp插件/功能? - Amir
您可以在agent属性中使用环境变量本身。例如:"agent": "${env:SSH_AUTH_SOCK}"。此外,"privateKeyPath"不是有效的属性,应该是"privateKey"。如果您查看源代码,您会发现它实际上是从文件中读取的。 - Drew Chapin
1
应该是"$SSH_AUTH_SOCK"而不是"${env:SSH_AUTH_SOCK}" - Sarbbottam
@DrewChapin,你的链接没有显示sftp的源代码,只显示了ftp-simple的源代码...两种方法对我都不起作用...我总是要输入我的口令短语...所以代理程序不起作用。 - MonTea

20

对我来说,只使用 privateKeyPath 选项就足够了。

...
    "host": "my.site",
    "protocol": "sftp",
    "port": 22,
    "username": "username",
    "privateKeyPath": "/Users/username/.ssh/id_rsa",
...

注意:要使用密钥登录,您需要使用ssh-copy-id username@my.site命令将您的密钥首先安装到远程服务器上。


2
这对我在Windows机器上也起作用了。使用putty生成密钥,并像这样使用ppk和正斜杠:code - B. Clincy
你真是个救命恩人! - João Pedro Raldi

5

你可以这样做。

"agent": "$SSH_AUTH_SOCK"

没错 - 这就是我需要做的全部(VS Code v1.71.0 和 SFTP v1.15.14,macOS Monterey v12.5.1) - Martin CR

0

启用口令短语对话框:

"passphrase": true,

维基中有描述。这适用于Natizyskunk和liximomo。

我正在使用liximomo的一个可工作的分支版本,因为我在那里遇到了一个恼人的虚假错误消息。


0

生成指定 ecdsa 算法类型的 SSH 密钥:ssh-keygen -t ecdsa(Linux)PuTTY(Windows)

{
"name": "your_remote_server_name",
"host": "123.456.789.100",
"protocol": "sftp",
"port": 1234,
"username": "remote_user_name",
"privateKeyPath": "/home/local_user_name/.ssh/id_ecdsa",
"passphrase":true,
"remotePath": "/home/remote_user_name/folderxyz",
"uploadOnSave": true,
"useTempFile": false,
"openSsh": false
}

如果在生成ssh密钥时不使用密码短语,请从此代码中删除("passphrase":true,)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接