远程服务器需要私钥和密码才能进行身份验证。我正尝试从代表我的本地 Ubuntu 桌面上的非 root 帐户运行的 Nautilus 以(在该服务器上)身份连接到服务器root
。身份验证所需的私钥是不是位于~/.ssh
(我已经在那里获得了其他密钥)但我将它在另一个目录中。
除了显而易见的方法之外,我还尝试输入root@server
“服务器”字段并将“用户名”和“密码”字段留空,将密码放在“密码”字段中,但它仍然显示“权限被拒绝”,并且在任何时候都不要求输入私钥。
我也尝试过ssh-add path/to/privatekey
,但是它说“无法打开与您的身份验证代理的连接。”,但我不确定ssh-add
这是否与此相关。
我可以通过终端 ssh 进入服务器
ssh -i <...>/id_rsa root@server
并回答随后的密码问题。
答案1
Marcin Kaminski 的解决方案的简短版本(跳过脚本)是
ssh-agent
ssh-add /path/to/your/private_key
nautilus sftp://user@server
。我认为先测试一下解决方案是否有效会比较容易。设置后我遇到了同样的问题,PasswordAuthentication no
这/etc/ssh/sshd_config
三个命令解决了我的问题。
答案2
我不明白为什么要出现密钥选择对话框。服务器负责提供它愿意接受的身份验证方法,客户端负责提供凭证。
提供这些详细信息的最常用方法之一是使用您似乎没有运行的 ssh-agent。这是我放入的一个小片段,~/.profile
以确保我的 ssh-agent 始终在运行:
run_ssh_agent() {
ssh-agent | grep -vi 'agent pid' > ~/.ssh-agent
. ~/.ssh-agent
}
if [[ -f ~/.ssh-agent ]]; then
. ~/.ssh-agent
if [[ -n ${SSH_AGENT_PID} ]]; then
if ! ps -p ${SSH_AGENT_PID} | grep 'ssh-agent' &>/dev/null; then
run_ssh_agent
fi
fi
else
run_ssh_agent
fi
将代码放在那里,退出你的 X 会话,重新登录,打开终端并将你的密钥添加到你的代理:
ssh-add /path/to/your/private_key
通过运行验证它是否已添加ssh-add -l
,并使用 Nautilus 连接到服务器(无需提供密码)。
答案3
我可以通过执行以下操作使用私钥连接到 Nautilus(Ubuntu 12.04)中的服务器:
- 在 Nautilus 中,选择菜单:“文件”->“连接到服务器...”
- 将“类型:”更改为“SSH”
- 在“服务器:”字段中输入服务器的地址(省略用户名@)
- 在“用户名:”后输入您的用户名,但密码字段留空。
当您点击“连接”时,会出现一个对话框,告诉您需要密码才能解锁密钥。在我的例子中,密钥不是默认的“~/.ssh/id_rsa”,因此 SSH 客户端和服务器之间的通信必须向 Nautilus 透露应该使用哪个密钥。
输入密码后,会打开一个新的 Nautilus 窗口,我可以在里面浏览服务器上的文件。在左侧窗格中,我现在有一个快捷方式“服务器上用户的 SFTP”,我也可以使用它来卸载(挂载)服务器文件系统。
答案4
如果我理解正确的话,您正在使用公钥身份验证,但您的私钥需要密码才能解锁,并且连接尝试失败,因为显然没有提示您输入保护密钥的密码。
这问题略有不同,但第一个答案似乎描述了相同的情况。然而,它暗示密码对话框应该只是工作。也许它可以提供一个起点?
ssh
既然您说在终端中使用它可以工作,那么大概它不是像远程主机身份改变那样的东西,我认为这可能会导致无声故障nautilus
。