Ssh
用於執行 ssh-agent 的 shell 腳本
美好的一天,我整天都在閱讀類似的主題,但不幸的是找不到適合我情況的答案。所以這就是我想要做的。我有一個帶有很多函式的 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_SOCK
,SSH_AGENT_PID
變數將失去。