Repository navigation
Expand file tree
/
Copy pathmsh
More file actions
executable file
·145 lines (143 loc) · 3.07 KB
/
Copy pathmsh
File metadata and controls
executable file
·145 lines (143 loc) · 3.07 KB
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
ADDRPATH=~/.ssh/.addresses
help(){
echo "Usage: msh [-d|-c|-n|-h] [user@host]"
echo ""
echo " msh [user@]host Connect and copy public key to remote host(only in first time)"
echo " msh Connect remote host from address list"
echo " msh -c Add comment for one host address"
echo " msh -d Delete a host address"
echo " msh -n [user@]host Connect but not copy public key to remote host(only in first time)"
echo " msh -k Copy local public key to remote for host which already connected"
echo " msh -h Help"
}
if [ ! -f $ADDRPATH ]
then
touch $ADDRPATH
fi
if [ $# == 0 ]
then
cat -n ${ADDRPATH}
line=$(sed -n "$=" ${ADDRPATH})
read -p "Input selection(default 1):"
if [ ${#REPLY} == 0 ]
then
REPLY="1"
elif [ "$REPLY" -gt 0 ] 2> /dev/null && [ $REPLY -le $line ] 2> /dev/null
then
:;
else
echo "Invalid Selection!"
exit
fi
addr=$(sed -n "${REPLY}p" ${ADDRPATH}|cut -d' ' -f1)
full=$(sed -n "${REPLY}p" ${ADDRPATH})
sed -i "/${full}/d" ${ADDRPATH}
line=$(sed -n "$=" ${ADDRPATH})
if [ ! $line ]
then
echo $full > $ADDRPATH
else
sed -i "1i\\${full}" ${ADDRPATH}
fi
ssh $addr
elif [ $# == 1 ]
then
if [ $1 == "-d" ]
then
cat -n ${ADDRPATH}
line=$(sed -n "$=" ${ADDRPATH})
read -p "Input selection:"
if [ ${#REPLY} == 0 ] || [ $REPLY -gt $line ] || [ $REPLY -le 0 ]
then
echo "Invalid Selection!"
exit
fi
addr=$(sed -n "${REPLY}p" ${ADDRPATH})
sed -i "/${addr}/d" ${ADDRPATH}
elif [ $1 == "-c" ]
then
cat -n ${ADDRPATH}
line=$(sed -n "$=" ${ADDRPATH})
read -p "Input selection:"
if [ ${#REPLY} == 0 ] || [ $REPLY -gt $line ] || [ $REPLY -le 0 ]
then
echo "Invalid Selection!"
exit
fi
addr=$(sed -n "${REPLY}p" ${ADDRPATH}|cut -d' ' -f1)
full=$(sed -n "${REPLY}P" ${ADDRPATH})
read -p "Input comment:"
sed -i "s/${full}/${addr} ===> ${REPLY}/g" ${ADDRPATH}
elif [ $1 == "-k" ]
then
if [ ! -f ~/.ssh/id_rsa.pub ]
then
echo "The public key is not exist"
exit
fi
cat -n ${ADDRPATH}
line=$(sed -n "$=" ${ADDRPATH})
read -p "Input selection:"
if [ ${#REPLY} == 0 ] || [ $REPLY -gt $line ] || [ $REPLY -le 0 ]
then
echo "Invalid Selection!"
exit
fi
addr=$(sed -n "${REPLY}p" ${ADDRPATH}|cut -d' ' -f1)
ssh-copy-id ${addr}
elif [ $1 == "-h" ]
then
help
else
if [ ! -f ~/.ssh/id_rsa.pub ]
then
ssh-keygen
exit
fi
ssh-copy-id $*
if [ $? != 0 ]
then
exit
fi
line=$(sed -n "$=" ${ADDRPATH})
if [ ! $line ]
then
echo $1 > ${ADDRPATH}
else
sed -i "/$1/d" ${ADDRPATH}
line=$(sed -n "$=" ${ADDRPATH})
if [ ! $line ]
then
echo $1 > ${ADDRPATH}
else
sed -i "1i\\$1" ${ADDRPATH}
fi
fi
ssh $*
fi
elif [ $# == 2 ]
then
if [ $1 == "-n" ]
then
line=$(sed -n "$=" ${ADDRPATH})
if [ ! $line ]
then
echo $1 > ${ADDRPATH}
else
sed -i "/$1/d" ${ADDRPATH}
line=$(sed -n "$=" ${ADDRPATH})
if [ ! $line ]
then
echo $1 > ${ADDRPATH}
else
sed -i "1i\\$1" ${ADDRPATH}
fi
fi
ssh $2
else
help
fi
else
help
fi