我正在使用脚本来更新我的系统:
cd /opt/
chmod 600 /opt/updater/.ssh/.pk
ssh-agent bash -c 'ssh-add /opt/updater/.ssh/.pk; git stash; git pull origin master'
/opt/updater/bin/updater.sh
我的问题是,如果/opt/updater/.ssh/.pk
我们不可读或 ssh-key 被更改,该过程将像这样卡住:
ssh-agent bash -c 'ssh-add /opt/RDE/rdeupdater/.ssh/.pk; git stash; git pull origin master;EX=$?;echo "-$EX" '
/opt/RDE/rdeupdater/.ssh/.pk: No such file or directory
No local changes to save
user@git's password:
我该如何解决这个问题?该系统不允许使用 Expect。
答案1
诀窍是,ssh
如果它尝试进行密码身份验证,就会立即失败(因此始终只进行公钥/私钥身份验证)。
您可以将环境变量设置GIT_SSH
为 shell 脚本,以将普通ssh
命令扩展为 include -o "PasswordAuthentication no"
,但如果您通常不访问git
存储库所在的服务器,也可以设置~/.ssh_config
:
Host server_with_remote_git_repo_name
PasswordAuthentication no
然后覆盖它,如果你需要server_with_remote_git_repo_name
使用密码访问,通过这样做ssh -o "PasswordAuthentication yes" server_with_remote_git_repo_name