首页 > 解决方案 > 无法在 Linux 中使用自动化脚本连接到 ssh-agent

问题描述

我正在尝试编写一个脚本来自动化一个rclone需要通过公钥和私钥密码进行 ssh 身份验证的过程。默认情况下,身份验证服务不会在新会话中运行。手动我可以

$ eval `ssh-agent`
Agent pid 2335
$ ssh-add
Enter passphrase for /home/user/.ssh/private_key:
Identity added: /home/user/.ssh/private_key (/home/user/.ssh/private_key)

然后我运行这个rclone过程。但是,如果我运行脚本,让我们调用它auth

#!/bin/bash
eval `ssh-agent`
/path/to/scpw

哪里scpwexpect自动输入密码的脚本ssh-add,然后我得到与手动输入相同的输出:

$ /path/to/auth
Agent pid 2335
Enter passphrase for /home/user/.ssh/private_key:
Identity added: /home/user/.ssh/private_key (/home/user/.ssh/private_key)

但是当我现在尝试运行该rclone过程时,我收到了错误消息

yyyy/mm/dd hh:mm:ss Failed to create file system for "computer:directory": couldn't 
connect to ssh-agent: SSH agent requested but SSH_AUTH_SOCK not-specified

如果我根本没有运行,这与我收到的错误消息相同ssh-add。我尝试了几种变体,例如

eval `ssh-agent` && ssh-add
eval `ssh-agent` && sleep 3 && ssh-add`
eval `ssh-agent` && /path/to/scpw (where scpw waits 3 seconds to enter passphrase)

所有这些也可以手动工作,但不能在脚本中工作。我很困惑。

标签: linuxauthenticationssh

解决方案


不同的问题(这里那里)指出缺少私钥。

在您的情况下,检查是否:

  • 这将使用默认名称键(用于测试)id_rsa 更好地工作
  • 如果expect脚本生成一个子shell(其中将私钥添加到代理),但是在下一行,该rclone命令不会从中受益,因为代理仅由scpw expect子shell中的脚本填充。

推荐阅读