@@ -18,7 +18,6 @@ remote_required () {
18
18
[[ -z " ${TARGET_HOST_KEY_PATH+x} " && -z " ${TARGET_HOST_PASSWORD+x} " ]] \
19
19
&& echo " TARGET_HOST_KEY_PATH or TARGET_HOST_PASSWORD required" \
20
20
&& validate=0
21
-
22
21
return $validate
23
22
}
24
23
@@ -33,6 +32,29 @@ connect_options() {
33
32
echo $options
34
33
}
35
34
35
+ ssh_config_file () {
36
+ cat << EOF > ssh_config
37
+ Host proxy_host
38
+ StrictHostKeyChecking no
39
+ HostName ${BASTION_HOST}
40
+ User ${BASTION_HOST_USERNAME}
41
+ IdentityFile ${BASTION_HOST_KEY_PATH}
42
+
43
+ Host target_host
44
+ HostName ${TARGET_HOST}
45
+ User ${TARGET_HOST_USERNAME}
46
+ IdentityFile ${TARGET_HOST_KEY_PATH}
47
+ ProxyJump proxy_host
48
+ EOF
49
+ if [[ -z ${TARGET_HOST_KEY_PATH+x} ]]; then
50
+ sed -i" " -e ' 9d' ssh_config
51
+ fi
52
+ if [[ -z ${BASTION_HOST_KEY_PATH+x} ]]; then
53
+ sed -i" " -e ' 4d' ssh_config
54
+ fi
55
+ cat ssh_config
56
+ }
57
+
36
58
# If restart is involved, it can take a moment for the target host to become available again
37
59
# Check the connection to the host; "delay" in seconds, "repeats" in number of reps
38
60
# Run as: check_connection <repeats int> <delay int>
@@ -63,7 +85,7 @@ check_connection() {
63
85
# Define remote connection
64
86
uri () {
65
87
local remote=" ${TARGET_HOST_USERNAME} @${TARGET_HOST} "
66
- if [[ ! -z " ${TARGET_HOST_DOMAIN+x } " ]]; then
88
+ if [[ -n " ${TARGET_HOST_DOMAIN} " ]]; then
67
89
remote=" ${TARGET_HOST_USERNAME} @${TARGET_HOST_DOMAIN} @${TARGET_HOST} "
68
90
fi
69
91
echo " ${remote} "
@@ -73,37 +95,46 @@ uri () {
73
95
# $1 local path
74
96
# $2 remote path
75
97
scp_to_cmd () {
76
- if [[ ! -z " ${TARGET_HOST_KEY_PATH+x} " ]]; then
77
- echo " scp -r $( connect_options) -i ${TARGET_HOST_KEY_PATH} ${1} $( uri) :${2} "
98
+ cmd=" scp -r $( connect_options) "
99
+ if [[ -n " ${BASTION_HOST} " && -n " ${BASTION_HOST_USERNAME} " ]]; then
100
+ echo " ${cmd} -F ssh_config ${1} target_host:${2} "
101
+ elif [[ -n " ${TARGET_HOST_KEY_PATH} " ]]; then
102
+ echo " ${cmd} -i ${TARGET_HOST_KEY_PATH} ${1} $( uri) :${2} "
78
103
else
79
- echo " sshpass -p ${TARGET_HOST_PASSWORD} scp -r $( connect_options ) ${1} $( uri) :${2} "
104
+ echo " sshpass -p ${TARGET_HOST_PASSWORD} ${cmd} ${1} $( uri) :${2} "
80
105
fi
81
106
}
82
107
83
108
# Generate SCP command
84
109
# $1 remote path
85
110
# $2 local path
86
111
scp_from_cmd () {
87
- if [[ ! -z " ${TARGET_HOST_KEY_PATH+x} " ]]; then
88
- echo " scp -r $( connect_options) -i ${TARGET_HOST_KEY_PATH} $( uri) :${1} ${2} "
112
+ cmd=" scp -r $( connect_options) "
113
+ if [[ -n " ${BASTION_HOST} " && -n " ${BASTION_HOST_USERNAME} " ]]; then
114
+ echo " ${cmd} -F ssh_config target_host:${1} ${2} "
115
+ elif [[ -n " ${TARGET_HOST_KEY_PATH} " ]]; then
116
+ echo " ${cmd} -i ${TARGET_HOST_KEY_PATH} $( uri) :${1} ${2} "
89
117
else
90
- echo " sshpass -p ${TARGET_HOST_PASSWORD} scp -r $( connect_options ) $( uri) :${1} ${2} "
118
+ echo " sshpass -p ${TARGET_HOST_PASSWORD} ${cmd} $( uri) :${1} ${2} "
91
119
fi
92
120
}
93
121
94
122
# Generate SSH command
95
123
ssh_cmd () {
96
- cmd=" "
97
- if [[ ! -z " ${TARGET_HOST_KEY_PATH+x} " ]]; then
98
- cmd=" ssh $( connect_options) -i ${TARGET_HOST_KEY_PATH} $( uri) "
124
+ cmd=" ssh $( connect_options) "
125
+ if [[ -n " ${BASTION_HOST} " && -n " ${BASTION_HOST_USERNAME} " ]]; then
126
+ cmd+=" -F ssh_config target_host "
127
+ elif [[ -n " ${TARGET_HOST_KEY_PATH} " ]]; then
128
+ cmd+=" -i ${TARGET_HOST_KEY_PATH} $( uri) "
99
129
else
100
- cmd=" sshpass -p ${TARGET_HOST_PASSWORD} ssh $( connect_options ) $( uri) "
130
+ cmd=" sshpass -p ${TARGET_HOST_PASSWORD} ${cmd} $( uri) "
101
131
fi
132
+
102
133
# On AWS MacOS ssh session is not recognized as expected
103
134
if [[ ${OS} == ' darwin' ]]; then
104
135
cmd+=" sudo su - ${TARGET_HOST_USERNAME} -c \" PATH=\$ PATH:/usr/local/bin && $@ \" "
105
136
else
106
- cmd+=" $@ "
137
+ cmd+=" $@ "
107
138
fi
108
139
echo " ${cmd} "
109
- }
140
+ }
0 commit comments