Linux 来自shellscript的SSH,无密码

Linux 来自shellscript的SSH,无密码,linux,shell,ssh,sh,Linux,Shell,Ssh,Sh,我已经为我的学校项目生成了一个基于raspberry pi(运行raspbian)的密钥对。当我跑的时候 ssh -f -N -R 54321:localhost:22 mylogin@host 在命令行中,我没有遇到任何问题。隧道是在我不需要输入密码的情况下设置的。但是,当我尝试从shell脚本运行完全相同的代码时,它会提示我输入密码。有人知道我的错误吗?在大多数Linux发行版中,登录时会启动ssh代理的实例。这是一个后台进程,保存SSH密钥的解密副本;ssh命令将尝试通过ssh代理访问密

我已经为我的学校项目生成了一个基于raspberry pi(运行raspbian)的密钥对。当我跑的时候

ssh -f -N -R 54321:localhost:22 mylogin@host

在命令行中,我没有遇到任何问题。隧道是在我不需要输入密码的情况下设置的。但是,当我尝试从shell脚本运行完全相同的代码时,它会提示我输入密码。有人知道我的错误吗?

在大多数Linux发行版中,登录时会启动
ssh代理的实例。这是一个后台进程,保存SSH密钥的解密副本;
ssh
命令将尝试通过
ssh代理
访问密钥,以便进行公钥身份验证。
ssh-agent
的要点是,在登录会话期间,您只需输入ssh密钥的密码一次。(在某些发行版上,您甚至不需要输入此密码-您的密钥在登录时会自动解密。)

我猜您是在尝试从cron或其他服务器进程(如web服务器或CGI脚本)运行脚本?如果是这样,它将不会为
ssh
命令设置与
ssh代理
对话所需的环境变量,因此它将提示输入密码(如果没有在终端内运行,则会失败)


您可以通过存储SSH密钥的未加密副本(因此您不需要
SSH代理
对其进行解密)来解决此问题,但由于这是一项主要的安全措施,因此通常只对允许锁定访问的SSH密钥执行此操作,最低权限帐户。

您可以共享脚本或如何运行脚本吗?请看一看,希望它能解决您的问题。密钥是经过解密存储的,安全性没有问题,因为它是在没有外部internet访问的教室环境中。我正在从rc.local启动脚本,调用python脚本来运行命令。当脚本被自动调用时,我得到“主机密钥验证失败”。当我在一秒钟后手动运行脚本时,一切正常。我通过启动xsession并运行后台应用程序找到了一个解决方法,但在我看来,这不是一个很好的解决方案。