Собрать автономный bash

Это вполне выполнимо только с конфигурацией ssh, без использования отдельных псевдонимов для lan и wan или создания каких-либо дополнительных перенаправлений портов. (Но вам, естественно, нужен какой-то способ определить, находитесь ли вы в своей локальной сети или нет)

В ~/.ssh/configвы можете добавить что-то вроде этого:

Match host raspi exec "am_i_outside_of_my_lan"
    HostName 12.345.67.89
    Port 1234

Вместо am_i_outside_of_my_lanвам нужно поместить команду, которая определяет, находитесь ли вы в своей домашней сети или нет, и возвращает код выхода 0, если вы находитесь за ее пределами, и что-то еще в противном случае.

Условие host, вероятно, говорит само за себя -, но условие execтребует некоторого объяснения. :Оно соответствует только тогда, когда данная команда возвращает код выхода 0, т.е. Нет ошибки.

Другими словами, это означает, что часть host raspiограничивает это правило до тех пор, пока вы пытаетесь подключиться к хосту raspi, а exec "am_i_outside_my_lan"дополнительно ограничивает его, так что оно применяется только при подключении из вне вашей домашней сети. Таким образом, внутри вашей домашней сети ssh user@raspiделает то же самое, что и обычно, но за ее пределами правило совпадает, и вместо этого оно выполняет эквивалент ssh -p 1234 user@12.345.67.89.

Что использовать вместо am_i_outside_of_my_lan, это полностью зависит от вашей настройки. Я предлагаю поместить команды в отдельный скрипт вместо того, чтобы пытаться написать его встроенным, потому что цитирование кажется немного сложным для правильного понимания.

Лично я использовал следующий скрипт Python, чтобы определить, нахожусь ли я в своей собственной сети:(Поскольку мое доменное имя разрешается в локальный IP-адрес внутри моей собственной сети)

#! /usr/bin/env python
import socket, sys

sys.exit(socket.gethostbyname('mydomain.com').startswith('192.168.1.'))

Если у вас нет аналогичной настройки, возможно, вам придется сделать что-то еще. (Например, вы можете просмотреть имя беспроводной сети, к которой вы подключены, или даже запросить ---мой -IP-сервис, чтобы получить внешний IP-адрес сети, к которой вы подключены. повторно подключен к)

1
09.08.2019, 13:38
1 ответ

Загрузите пакет bash -static из Debian и извлеките исполняемый файл.

ar p bash-static_*.deb data.tar.xz | tar -xJ./bin/bash-static

Если хотите посмотреть, как это делается, посмотрите исходники. Инструкции по сборке находятся в debian/rules. Происходит большое расширение,так что беги:

debian/rules static-build

Я думаю, все, что вам нужно, это (, но я не пробовал):

./configure --enable-static-link
make

Вопрос в том, зачем вам это нужно. Практически во всех дистрибутивах bash уже установлен как /bin/bash, и это необязательно. Было бы полезнее с zsh, который в большинстве дистрибутивов есть, но не установлен по умолчанию. Для зш опять нужен (, не пробовал):

./configure --enable-ldflags=-static --disable-dynamic --disable-dynamic-nss
make
3
27.01.2020, 23:41

Теги

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