我可以 ssh 到具有 2FA 的服务器,但无法通过 Ubuntu (20.04) 访问它nautilus
sftp
。sftp://hostname.com
或导致超时,添加端口 22 也无济于事。我只想以图形方式浏览服务器目录。请注意,在我的远程服务器中不接受,因为我无权访问,而且我根本无法向管理员建议任何更改。请帮忙。sftp://[email protected]
nautilus
ssh keys
root
我很惊讶地发现一款 Android 应用可以实现上述功能 (termius)。我只需提供我的用户名 (和密码) 和主机名,它就可以在那里工作 (它只要求输入 otp)。我们可以在 中做同样的事情吗nautilus
?
答案1
尽管 Nautilus 实现了自己的 SFTP 客户端代码,但它仍然使用了ssh
底层的 OpenSSH 工具,该工具在身份验证方面可编程性不强 - 即 Nautilus 无法轻易区分客户端显示的本地提示和来自服务器的远程输出,因此它必须查找文字password:
并假定这是密码提示。
(同时,Android 应用程序使用 SSH 客户端图书馆它专门通过代码驱动,因此它确切地知道收到了什么提示以及实际的“会话”何时开始。)
您可以通过使用 OpenSSH 的多路复用模式,允许进一步ssh
调用以重新使用现有连接。-M
和-S
选项以及ControlMaster
和ControlPath
适用于此处。
对于当前的 GVFS 版本(1.47 及更高版本),已经在内部使用多路复用,您需要为 GVFS 将查看的多路复用套接字指定一个特定位置:
$ ssh -fNMS "$XDG_RUNTIME_DIR/gvfsd-sftp/%C" user@remotehost
Enter PIN for 'etoken_foo':
$ gio mount sftp://user@remotehost
如果 OTP 提示未出现,请省略-f
和-N
选项以启动交互式 shell 连接,然后只需在后台打开该 shell。
对于较旧的 GVFS 版本(1.46 及更早版本)和/或交互式ssh
调用,您需要定义一个默认文件中的套接字位置~/.ssh/config
(即的全局等效项-S
):
Host *
ControlPath ~/.ssh/S.%r@%h:%p
然后使用启动后台连接ssh -fNM user@thathost
,随后的 GVFS 挂载将自动使用它(另一个也将使用它ssh user@thathost
)。