มีวิธีที่สะดวกเพื่อให้แน่ใจว่าการเข้าสู่ระบบทั้งหมดจากผู้ใช้ที่ได้รับ (เช่นฉัน) ใช้ ssh-agent เดียวกันหรือไม่? ฉันแฮกสคริปต์เพื่อให้งานนี้ใช้เวลาส่วนใหญ่ แต่ฉันสงสัยว่าตลอดมีวิธีที่จะทำสิ่งที่ฉันเพิ่งพลาด นอกจากนี้ตั้งแต่นั้นมามีความก้าวหน้าอย่างมากในด้านเทคโนโลยีคอมพิวเตอร์เช่นเว็บไซต์นี้
ดังนั้นเป้าหมายที่นี่ก็คือ
- เมื่อใดก็ตามที่ฉันเข้าสู่กล่องไม่ว่าจะผ่าน SSH หรือในเซสชันกราฟิกเริ่มต้นจาก gdm / kdm / etc หรือที่คอนโซล:
- หากชื่อผู้ใช้ของฉันไม่มีการ
ssh-agent
ทำงานอยู่ในขณะนี้หนึ่งจะเริ่มต้นตัวแปรสภาพแวดล้อมที่ส่งออกและssh-add
เรียกว่า - มิฉะนั้นพิกัดของตัวแทนที่มีอยู่จะถูกส่งออกในตัวแปรสภาพแวดล้อมของเซสชันการเข้าสู่ระบบ
- หากชื่อผู้ใช้ของฉันไม่มีการ
สิ่งอำนวยความสะดวกนี้มีค่าโดยเฉพาะอย่างยิ่งเมื่อใช้กล่องที่เป็นปัญหาเป็นจุดถ่ายทอดเมื่อssh
เข้าไปในกล่องที่สาม ในกรณีนี้มันหลีกเลี่ยงการพิมพ์ข้อความรหัสผ่านของไพรเวตคีย์ทุกครั้งที่คุณทำเช่นนั้นgit push
หรือต้องการทำอะไรบางอย่าง
สคริปต์ที่ให้ไว้ด้านล่างทำสิ่งนี้ได้อย่างน่าเชื่อถือแม้ว่ามันจะไม่เรียบร้อยเมื่อ X เกิดข้อผิดพลาดและฉันก็เริ่มเซสชั่นกราฟิกอื่น ในกรณีนั้นอาจมีความรุนแรงอื่น ๆ เกิดขึ้น
นี่คือสคริปต์ที่ไม่ดีของฉัน ฉันมาจากที่.bashrc
นี่
# ssh-agent-procure.bash
# v0.6.4
# ensures that all shells sourcing this file in profile/rc scripts use the same ssh-agent.
# copyright me, now; licensed under the DWTFYWT license.
mkdir -p "$HOME/etc/ssh";
function ssh-procure-launch-agent {
eval `ssh-agent -s -a ~/etc/ssh/ssh-agent-socket`;
ssh-add;
}
if [ ! $SSH_AGENT_PID ]; then
if [ -e ~/etc/ssh/ssh-agent-socket ] ; then
SSH_AGENT_PID=`ps -fC ssh-agent |grep 'etc/ssh/ssh-agent-socket' |sed -r 's/^\S+\s+(\S+).*$/\1/'`;
if [[ $SSH_AGENT_PID =~ [0-9]+ ]]; then
# in this case the agent has already been launched and we are just attaching to it.
##++ It should check that this pid is actually active & belongs to an ssh instance
export SSH_AGENT_PID;
SSH_AUTH_SOCK=~/etc/ssh/ssh-agent-socket; export SSH_AUTH_SOCK;
else
# in this case there is no agent running, so the socket file is left over from a graceless agent termination.
rm ~/etc/ssh/ssh-agent-socket;
ssh-procure-launch-agent;
fi;
else
ssh-procure-launch-agent;
fi;
fi;
โปรดบอกฉันว่ามีวิธีที่ดีกว่าในการทำเช่นนี้ นอกจากนี้โปรดอย่า nitpick ความไม่สอดคล้อง / gaffes (เช่นใส่var
สิ่งของetc
) ฉันเขียนเมื่อไม่นานมานี้และเรียนรู้หลายสิ่งหลายอย่างตั้งแต่นั้นมา