SSH к двум адресам, используйте тот, который соединяется сначала

Не совсем. Существует подобие, но только в какой-то степени. Я знал, что люди думают “хорошо, символьные ссылки похожи на ярлыки, но я не вполне понимаю их” до точки, когда они сказали, “о, на самом деле символьные ссылки не похожи на ярлыки, и теперь я понимаю их”. Таким образом, я думаю, что ярлыки не являются хорошим способом понять символьные ссылки, и я рекомендую очистить Ваш ум сравнения с ярлыками.

Символьная ссылка указывает на название другого файла. Это - "имя" как в полном пути, т.е. потенциально включая часть каталога, а также имя в каталоге. Путь может быть полным (/foo/bar) или родственник (foo/bar или ../bar или просто bar); если цель дана относительным путем, она интерпретируется относительно каталога, содержащего символьную ссылку. Конечный файл может или не может существовать, и удаление, перемещение или создание конечного файла не будут влиять на символьную ссылку.

Операции, которые действуют на действие содержания файла на конечном файле. Таким образом, когда Вы читаете или пишете в файл через символьную ссылку или выполняете программу через символьную ссылку, это - как будто Вы получали доступ к конечному файлу. Операции, которые действуют на файл с внешней стороны, такой как переименование или удаление, действие на самой символьной ссылке. Обратите внимание, что для записи, это имеет значение, перезаписываете ли Вы существующий файл (который будет действовать на цель), или удалите существующий файл и создайте новый файл (который оставит цель неповрежденной и создаст новый файл, заменяющий символьную ссылку, если приложение не будет заботиться, чтобы перейти по ссылке (многие делают)).

5
19.12.2012, 17:50
3 ответа

Что относительно того, чтобы пробовать простое OR от Вашей оболочки?

ssh username@franklin.local || ssh -p 22 remote.address.of.franklin

Я не действительно знаком с ZSH, но я предполагаю, что логика оценки все еще была бы ленива, означая, что вторая часть только оценена, если первая часть перестала работать. Конечно, первая команда может остановить в течение некоторого времени попытку выяснить если franklin.local доступно.

Вы могли присвоить ту команду псевдониму для сокращения, это (как Вы сделал с функцией).

4
27.01.2020, 20:37
  • 1
    О, человек, это полностью работает. Намного более хороший, чем тот я отправил и собирался принять как ответ, пока я не видел это. –  Zev Eisenberg 19.12.2012, 18:50
  • 2
    я рад, что Вам нравится он (o: –  Axel Knauf 19.12.2012, 18:51
  • 3
    @Alan, который Вы имеете в виду, делает передачу в другом направлении? Несомненно, просто инвертируйте перенаправления и замену gzip gunzip: ssh root@PC1 'gunzip >/dev/sdb' <~/Desktop/ddbackup/image.gz ---------121 '-o ConnectTimeout=5 добавления--------104608----' к 'ssh username@franklin.local' ускорит вещи немного также. –  Stephen Paul Lesniewski 06.01.2013, 17:14

Я использую nc вместо ping:

franklin() {
    local host=franklin.local
    if nc -w1 $host 22 &>/dev/null; then
        echo "connecting locally"
    else
        echo "connecting remotely"
        host=remote.address.of.franklin
    fi
    ssh username@$host "$@"
}

Я добавил "$@" к вызову ssh. Это позволяет нам, Вы быстро выполняете удаленные команды как

franklin uptime
2
27.01.2020, 20:37

Оказывается, что я был ближе к решению, чем я думал. У меня было дефектное предположение о том, как часть поиска адреса ping работает. Я думал, что, если бы у меня были сетевое отклонение и franklin.local, не возвратил ping, затем он перестал бы работать и соединился бы удаленно вместо этого. Оказывается, если franklin.local находится в сети, ping -c 1 franklin.local возвраты 0, и в противном случае это возвращается 68, оба довольно сразу. Таким образом, единственное изменение является количеством ping от 5 до 1 (я также настроил порядок сценария заставить его иметь больше смысла):

function franklin
{
    ping -c 1 franklin.local &> /dev/null
    if [[ $? == 0 ]]; then
        echo "Connecting locally."
        ssh "username@franklin.local"
    else
        echo "Connecting remotely."
        ssh "remote.address.of.franklin"
    fi
}

Это значительно быстрее, чем, как у меня был он прежде, и не заметно медленнее, чем просто использование соответствующей команды ssh непосредственно.

1
27.01.2020, 20:37

Теги

Похожие вопросы