繁体   English   中英

无法使用 Linux 中的自动化脚本连接到 ssh-agent

[英]Cannot connect to ssh-agent with automation script in Linux

我正在尝试编写一个脚本来自动化一个rclone过程,该过程需要通过带有私钥密码短语的公钥进行 ssh 身份验证。 新的 session 中默认不运行身份验证服务。 手动我可以

$ 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

其中scpw是一个自动输入ssh-add密码短语的expect脚本,然后我得到与手动输入相同的 output :

$ /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)

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

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

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

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

您不应多次eval ssh-agent ,否则会创建多个 ssh-agent 实例。

你需要的是

nohup ssh-agent 2>/dev/null | grep -v echo > $HOME/.ssh/sh.pid
ssh-add

然后在需要 ssh-agent 的脚本中,执行以下操作:

source $HOME/.ssh/sh.pid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM