У вас были включены параметры auto_cd
и cdable_vars
. В auto_cd
, если вы вводите каталог в качестве имени команды, подразумевается команда cd
. С cdable_vars
, если каталог не существует или команда не существует с auto_cd
, то имя ищется в хэш-таблице каталога.
Пока вы используете систему завершения «нового стиля» ( compinit
), которая включается oh-my-zsh, имя будет предлагаться в качестве завершения, когда это необходимо.
Спасибо @Andrew за указание на ssh-agent
. Насколько я понимаю, если вы хотите иметь возможность устанавливать туннель без необходимости вводить пароль каждый раз, пароль должен быть сохранен или удален. Я выбрал удалить его. Для протокола, вот некоторые исправления, основанные на комментариях, которые я получил:
#!/usr/bin/env bash
# Establish tunnel
createTunnel() {
/usr/bin/ssh -i /home/laptopuser/.ssh/id_rsa_tunnel -R 2200:localhost:22 vpsuser@vps.com
}
# Do nothing if tunnel is already established
/usr/bin/ssh -i /home/user/laptopuser/.ssh/id_rsa_tunnel -p 2200 laptopuser@vps.com true
if [[ $? -ne 0 ]]; then
createTunnel
fi
crontab:
# m h dom mon dow command
*/1 * * * * /home/laptopuser/bin/establishTunnel.sh
скопируйте свой идентификатор туннеля на vps:
ssh-copy-id -i /home/user/laptopuser/.ssh/id_rsa_tunnel vps.com
подождите, пока туннель не будет запущен (см. sudo watch grep CRON /var/log/syslog
) и скопируйте свой обычный идентификатор, если вы еще не получили его в ~/.ssh/authorized_keys
ssh-copy-id vps.com -p 2200
В идеале туннель должен работать как выделенный пользователь и на vps, и на ноутбуке.