Ssh

用於執行 ssh-agent 的 shell 腳本

  • December 29, 2016

美好的一天,我整天都在閱讀類似的主題,但不幸的是找不到適合我情況的答案。所以這就是我想要做的。我有一個帶有很多函式的 shell 腳本,其中一個函式應該呼叫 ssh-agent:

sh_agent_run () {
case "$(pidof ssh-agent | wc -w)" in
 0)  echo "SSH agent is not running. Startting SSH agent."
     eval `ssh-agent -s`
     ssh-add ${ssh_key}
     ;;
 1)  echo "SSH agent is running. Nothing to do."
     ;;
 *)  echo "Too much instances of SSH agent is running. Stopping SSH agent instances and running just one"
   while pidof ssh-agent; do
     echo "Stopping ssh-agent..."
     killall -9 ssh-agent
     sleep 1
   done
   echo "Starting valid SSH agent instance"
   eval `ssh-agent -s`
   ssh-add ${ssh_key}
 ;;
esac
}

輸出說:

$$ root@centos versions $$# ./ssh_tunnels.sh -sr SSH 代理沒有執行。啟動 SSH 代理。添加的身份:(ssh 密鑰的路徑)

但是當我嘗試連接到 ssh-agent 並使用 ssh-add -L 命令檢查密鑰時,它會說:

$$ root@centos versions $$# ssh-add -l 無法打開與您的身份驗證代理的連接。

有人可以幫我調整我的功能,以便我可以將它建構到我的腳本中並使用嗎?這對於不通過 .bashrc 執行 ssh-agent 至關重要,我需要通過此腳本(啟動、停止、狀態等)管理 ssh-agent

先感謝您

為了使您的腳本正常工作,您必須使用以下命令執行它.

. ./ssh_tunnels.sh

.orsource命令告訴 bash(YMMV 與其他 shell)使用目前 shell 執行腳本,而不是啟動新的 bash 副本來執行腳本。

這是必需的,因為命令

eval `ssh-agent -s`

設置環境變數,讓所有其他 ssh 程序知道如何與代理通信。環境變數僅在設置它們的 shell 中有效(以及從該 shell 執行的任何程序)。它們不會傳遞回父 shell,因此除非您在目前 shell 中執行命令,否則腳本退出.SSH_AUTH_SOCKSSH_AGENT_PID變數將失去。

引用自:https://serverfault.com/questions/823233