我为我的学校项目生成了一个密钥对,运行在树莓派(运行raspbian)上。我跑的时候
ssh -f -N -R 54321:localhost:22 mylogin@host
命令行中的我没有遇到任何问题。设置隧道时无需输入密码。但是,当我尝试从shell脚本运行完全相同的代码时,它会提示我输入密码。有人知道我的错误吗?
答案 0 :(得分:1)
在大多数Linux发行版中,登录时会启动ssh-agent
的实例。这是一个后台进程,可以保存SSH密钥的解密副本; ssh
命令将尝试通过ssh-agent
访问密钥以进行公钥验证。 ssh-agent
的要点是,您只需在登录会话期间输入一次SSH密码即可。 (在某些发行版上你甚至不需要输入它 - 你的密钥会在你登录时自动解密。)
我猜你在尝试从cron或其他服务器进程(如Web服务器或CGI脚本)运行脚本?如果是这样,它将没有为ssh
命令设置必要的环境变量来与ssh-agent
通信 - 因此它将提示输入密码(因此如果它不在终端内运行则会失败) )。
你可以通过存储SSH密钥的未加密副本来解决这个问题(所以你不需要ssh-agent
来解密它),但由于这是一个主要的安全措施,所以通常只做SSH密钥,允许访问锁定的,最低权限的帐户。