如果密钥不在 ssh-agent 中,是否在 ssh/slogin 上执行 ssh-add?

Pet*_*own 10 ssh-agent

当我运行 Gnome 时,如果身份未加载,ssh-agent 将在 slogin/ssh 上运行 ssh-add。我想在远程 shell 上模仿这种行为,但我发现的所有内容都建议在登录时运行 ssh-add。如果我随后在远程 shell 上运行 slogin/ssh,我只想运行 ssh-add,而不是每次登录时。

Pet*_*own 9

我通过 bash shell 找到了一个解决方案。

添加到 .bashrc:

check-ssh-add() {
if [ "$DESKTOP_SESSION" == "" ]; then
  if [[ `ssh-add -l` != *id_?sa* ]]; then 
    ssh-add -t 5h  ## 5 hour ssh-agent expiration
  fi
fi
}

slogin() {
check-ssh-add
/usr/bin/slogin $@
}

ssh() {
check-ssh-add
/usr/bin/ssh $@
}

scp() {
check-ssh-add
/usr/bin/scp $@
}

sftp() {
check-ssh-add
/usr/bin/sftp $@
}
Run Code Online (Sandbox Code Playgroud)


小智 7

其实还有更简单的方法。ssh-add -l如果有键,则返回 true (0),否则返回 false (1),因此您的第一个函数可以替换为:

check-ssh-add() {
  if ! ssh-add -l >/dev/null; then
      ssh-add -t 5h
  fi
}
Run Code Online (Sandbox Code Playgroud)