ssh publikkey身份validationgit内的bash脚本?

我目前在我的Linux服务器上运行了一个bash脚本,每周一次通过我的仓库,执行一些任务,并远程备份它们。

今天我开始备份一些远程存储库。 我的计划是能够在备份bash脚本内部运行一个类似于(cd $ dir && git pull origin master 2 >> $ LOGFILE)的for循环。 我似乎遇到的问题是,我试图从github中取出一些东西,这需要我的私钥文件在继续之前解锁。 有什么办法可以事先提供这个密码,这样我就不会得到密码的交互提示吗?

使用SSH代理转发 。 您将不得不在初始机器上使用代理; 您还必须在客户端和Linux服务器上启用代理转发。

假设所有的OpenSSH:

test -z "$SSH_AUTH_SOCK" && eval "$(ssh-agent)" ssh-add -f /path/to/your/key-accepted-by-GitHub ssh-add -f /path/to/your/key-accepted-by-your-user-on-the-linux-box ssh -A userName@theLinuxBox /path/to/the/script 

服务器上的sshd (“yourLinuxBox”)必须允许代理转发( AllowAgentForwarding在其sshd_config文件中;如果不存在,通常默认为“yes”)。

使用本地代理程序持有GitHub密钥和通过SSH连接将代理程序转发到Linux机器的情况下,任何需要密钥(例如git pull )的Linux机器上的任何正常使用的ssh都可以使用。

或者,您可以使用.ssh/config一个条目指定“first leg”的位来将最后两个命令缩写为ssh backup-server /path/to/the/script (您仍然需要确保GitHub密钥已被添加到您的本地代理):

 Host backup-server HostName theLinuxBox # name or IP User userName # username on remote system IdentityFile /path/to/key-accepted-by-your-user-on-the-linux-box ForwardAgent yes 

注意 :不要将代理转发到不受信任的服务器(服务器上的根可以使用其本地访问权限来使用存储在本地代理中的密钥)。

我认为以不同的用户来做备份是个好主意,因为你的私钥可能允许访问其他地方。 给这个用户一个没有密码的专用ssh密钥,并在你的脚本中使用这个用户。 在远程git服务器上,你可以限制其他用户的权限,这样只有你的git仓库可以被取消。