-
Notifications
You must be signed in to change notification settings - Fork 8
/
setup_ssh.sh
112 lines (97 loc) · 3.11 KB
/
setup_ssh.sh
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
#!/bin/bash
set -e # Exit immediately if a command exits with a non-zero status
# Function to export environment variables from a file
export_env_vars_from_file() {
local env_file=$1
while IFS= read -r line; do
if [[ "$line" =~ ^[A-Z0-9_]+=.* ]]; then
export "$line"
fi
done < "$env_file"
}
# Path to the captured environment variables file
ENV_VARS_FILE=/kaggle/working/kaggle_env_vars.txt
if [ -f "$ENV_VARS_FILE" ]; then
echo "Exporting environment variables from $ENV_VARS_FILE"
export_env_vars_from_file "$ENV_VARS_FILE"
else
echo "Environment variables file $ENV_VARS_FILE not found"
fi
if [ "$#" -ne 1 ]; then
echo "Usage: ./setup_ssh.sh <authorized_keys_url>"
exit 1
fi
AUTH_KEYS_URL=$1
setup_ssh_directory() {
mkdir -p /kaggle/working/.ssh
wget -qO- "$AUTH_KEYS_URL" > /kaggle/working/.ssh/authorized_keys
chmod 700 /kaggle/working/.ssh
chmod 600 /kaggle/working/.ssh/authorized_keys
}
create_symlink() {
if [ -d /kaggle/working/Kaggle_VSCode_Remote_SSH/.vscode ]; then
[ -L /kaggle/.vscode ] && rm /kaggle/.vscode
ln -s /kaggle/working/Kaggle_VSCode_Remote_SSH/.vscode /kaggle/.vscode
echo "Symlink to .vscode folder created."
ls -l /kaggle/.vscode
else
echo ".vscode directory not found in repository."
fi
}
configure_sshd() {
mkdir -p /var/run/sshd
{
echo "Port 22"
echo "Protocol 2"
echo "PermitRootLogin yes"
echo "PasswordAuthentication yes"
echo "PubkeyAuthentication yes"
echo "AuthorizedKeysFile /kaggle/working/.ssh/authorized_keys"
echo "TCPKeepAlive yes"
echo "X11Forwarding yes"
echo "X11DisplayOffset 10"
echo "IgnoreRhosts yes"
echo "HostbasedAuthentication no"
echo "PrintLastLog yes"
echo "ChallengeResponseAuthentication no"
echo "UsePAM yes"
echo "AcceptEnv LANG LC_*"
echo "AllowTcpForwarding yes"
echo "GatewayPorts yes"
echo "PermitTunnel yes"
echo "ClientAliveInterval 60"
echo "ClientAliveCountMax 2"
} >> /etc/ssh/sshd_config
}
install_packages() {
echo "Updating environment variables..."
{
echo 'export PATH=$PATH:/usr/local/cuda/bin:/usr/local/nvidia/bin:/opt/bin:/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:/usr/local/lib/x86_64-linux-gnu:/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/opt/conda/lib:$LD_LIBRARY_PATH'
echo 'export CUDA_HOME=/usr/local/cuda'
} >> /root/.bashrc
source /root/.bashrc
echo "Installing openssh-server..."
sudo apt-get update
sudo apt-get install -y openssh-server
}
start_ssh_service() {
service ssh start
service ssh enable
service ssh restart
}
cleanup() {
rm /kaggle/working/kaggle_env_vars.txt
}
(
install_packages
setup_ssh_directory &
create_symlink &
configure_sshd &
wait
start_ssh_service &
wait
cleanup
)
echo "Setup script completed successfully"
echo "All tasks completed successfully"