【问题标题】:How to run ssh-agent and ssh-add through an SH script?如何通过 SH 脚本运行 ssh-agent 和 ssh-add?
【发布时间】:2016-05-13 21:02:23
【问题描述】:

当我在我的 VPS 上连接时,我手动运行了以下两个命令:

eval ssh-agent $SHELL
ssh-add /home/duvdevan/.ssh/id_rsa

我尝试将它们添加到 ssh.sh 并在该目录中运行它:

./ssh.sh

但是什么也没发生。

我不是那种bash-savvy,所以任何帮助表示赞赏。

【问题讨论】:

    标签: linux bash ssh


    【解决方案1】:

    您需要source脚本而不是运行:

    . ./ssh.sh
    

    否则,eval 命令设置的环境变量在你当前的 shell 中将不可见,因此它不知道在哪里可以找到正在运行的 ssh 代理。

    为了提供更多背景知识,以下是它的工作原理:

    • ssh-agent 命令启动 ssh 代理,并将您需要设置以连接到代理的环境变量打印到标准输出。输出被格式化为要执行的命令。对于测试,您可以运行此命令并查看它打印的内容
    • eval 命令执行ssh-agent 打印的命令。如前所述,这些是设置环境变量的命令。执行完这些后,您将在此 shell 中运行的 ssh 命令将知道在哪里可以找到代理
    • ssh-add 命令能够找到代理,这要归功于之前设置的环境变量
    • 在脚本退出之前设置这些变量。当您运行./ssh.sh 时,变量会在该脚本的进程中设置,并且在脚本完成后不再可用
    • 通过使用. 获取ssh.sh 脚本,里面的命令将在当前shell 中执行,因此仍然设置环境变量,因此您的ssh 相关命令可以找到代理

    【讨论】:

    • 我需要将#/sh/bash 添加到我的.sh 脚本的顶部吗?
    • 不,与此无关
    最近更新 更多