-
Notifications
You must be signed in to change notification settings - Fork 0
/
ssh-login
77 lines (59 loc) · 1.47 KB
/
ssh-login
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/sh
#
# File: ~/.ssh/ssh-login
#
# Checks authentication environment.
# If the ssh-agent is not running, starts a new one.
#
# Setup instructions:
#
# 1) For bash and ksh users:
#
# Include the following in your ~/.bashrc or ~/.kshrc:
#
# . $HOME/.ssh/ssh-login
#
SSH_ENV=$HOME/.ssh/env-$HOSTNAME
function ssh_clean {
d="$HOME/.ssh"
f0=$d/known_hosts
f1=$d/known_hosts_tmp
cat /dev/null > $f1
while read host line; do
if [ $host != "localhost" ]; then
echo $host $line >> $f1
fi
done < $f0
mv $f1 $f0
chmod 644 $f0
}
# Initialize new agent and add authentication
function start_agent {
echo "Initialising new SSH agent on $HOSTNAME on $(date)" >> ~/agent
# Start authenticating daemon
# No authentications set up yet, just starting daemon!
ssh-agent | head -2 > ${SSH_ENV}
chmod 600 ${SSH_ENV}
# Find SSH_AUTH_SOCK and SSH_AGENT_PID of the available daemon
. ${SSH_ENV} > /dev/null
# Add authentication to this and only this daemon
# ssh-add path_to_key
}
if [ -f "$SSH_ENV" ]; then
# Find SSH_AUTH_SOCK and SSH_AGENT_PID of the available daemon
. ${SSH_ENV} > /dev/null
# Check if the agent is still running
ierr=0
ps ${SSH_AGENT_PID} > /dev/null || ierr=1
if [ $ierr == "0" ]; then
echo > /dev/null
else
# If not initialize new agent and
# add authentication
start_agent;
fi
else
start_agent;
fi
# Clean localhost entry in the known host file
ssh_clean