如何从 cron 作业自动进行 SSH 身份验证和 CVS 更新?

如何从 cron 作业自动进行 SSH 身份验证和 CVS 更新?

我从 cron 作业调用一个脚本。在脚本中,它需要运行 CVS 命令来从远程存储库进行更新。为此,它需要进行 SSH 身份验证。

我在脚本中放入了以下代码

...
ROOTPATH="/Users/qazwsx/project/"

cd $ROOTPATH

SSHAGENT="${ROOTPATH}ssh-agent.cf"

if [ -f "$SSHAGENT" ]; then
    rm "$SSHAGENT"
fi

ssh-agent -s | head -n 2 > "$SSHAGENT"

if [ -f "$SSHAGENT" ]; then
        echo "$SSHAGENT"
        source "$SSHAGENT"
        ssh-add
        #function killsshagent {
    #    /bin/kill $SSH_AGENT_PID
    #}
    #trap killsshagent EXIT
    rm "$SSHAGENT"
fi
...

但是当运行脚本时,会出现如下窗口:

在此处输入图片描述

我无法在输入字段中输入任何内容。因此,SSH 身份验证后的步骤未成功运行,因为未建立 SSH 访问。我想知道我应该如何在 cron 作业中执行 CVS 更新。

答案1

您可以创建另一个没有密码的密钥对:

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/cvs_rsa.id

然后将 ~/.ssh/cvs_rsa.id.pub 的内容添加到远程主机的 authorized_keys 中。然后,您应该能够从脚本中执行“ssh -i ~/.ssh/cvs_rsa.id user@remotehost”。

请注意,创建没有密码的密钥时,任何拥有私钥文件的人都可以以您的身份登录。请谨慎使用!

更新:来自 ssh-keygen(1)手册页:

 ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [-f output_keyfile]

 -b bits
         Specifies the number of bits in the key to create.  For RSA keys, the minimum size is 768 bits and the default is 2048 bits.  Generally, 2048 bits is considered sufficient.  DSA keys must be exactly 1024 bits as speci‐
         fied by FIPS 186-2.  For ECDSA keys, the -b flag determines the key length by selecting from one of three elliptic curve sizes: 256, 384 or 521 bits.  Attempting to use bit lengths other than these three values for
         ECDSA keys will fail.

 -t type
         Specifies the type of key to create.  The possible values are “rsa1” for protocol version 1 and “dsa”, “ecdsa” or “rsa” for protocol version 2.

因此,该命令的本质是,生成一个 4096 位 RSA 密钥并将其作为 cvs_rsa.id 存储在当前用户主目录中的 .ssh 目录中。无论设置了什么 $HOME 值,~/.ssh/ 都会扩展为 $HOME/.ssh/。

相关内容