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


10

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

Answers:


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 $@
}

7

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

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

 


1

在“这是一个交互式会话”部分中,甚至更简单

ssh-add -l &> /dev/null || ssh-add ~/.ssh/my_id

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.